2015-06-26 4 views
12

Ich habe einen MVC.NET 4-Webserver, der eine HTTP-POST-Anforderung mit einer JSON-formatierten Zeichenfolge als Anforderungsdaten akzeptiert. Ich möchte eine Regel in der IIS-Ebene hinzufügen, bevor die Anfrage den Server trifft, um die Anfrage von einigen Regex auf diese JSON-Zeichenfolge zu blockieren. Ist das möglich?IIS 8-Blockanforderung von JSON-Nutzdatenfeldern

+0

** um Anfrage durch einige Regex auf dieser JSON-Zeichenfolge zu blockieren ** Bitte erläutern Sie, was Sie damit meinen ... –

+0

@DaveAlperovich Die Anfrage hat einen JSON-formatierten String-Körper. Wenn diese Zeichenfolge mit einem Regex übereinstimmt, wird die Anfrage abgebrochen. Auf dieselbe Weise können Sie die Abfrage-URL einer Regex zuordnen. – Orr

+0

Verwenden Sie OWIN? Oder können Sie das HttpApplication.BeginRequest-Ereignis verwenden? Können Sie bitte erläutern, warum es auf IIS-Ebene sein muss? – milanio

Antwort

2

sehen Ich denke, Erstellen und Hinzufügen eines benutzerdefinierten Http Module kann Ihr Problem lösen. Ein HTTP-Modul wird bei jeder Anforderung als Reaktion auf die Ereignisse BeginRequest und EndRequest aufgerufen.

+0

danke - Ich bin tatsächlich auf der Suche nach einer Möglichkeit, dies auf der IIS-Ebene zu blockieren, nicht der Webserver. Führt das BeginRequest-Ereignis das aus? – Orr

+0

Wenn Sie sagen, IIS-Ebene .. Haben Sie gemeint, Blockierung nur für eine bestimmte Website zu implementieren? –

+0

http://www.iis.net/configreference/system.webserver/modules Oder verwenden Sie http://www.iis.net/learn/extensions/url-rewrite-module/request-blocking-rule-template –

5

Da Sie sagt:

ich es in der IIS-Ebene für ungültig zu erklären mehr Belastung der im Web Serverebene sein will eine anderen Thread für jede Anforderung erstellen zu müssen. Der Grund, warum ich möchte einige Anfrage blockieren ist, dass sie zu meine App nicht mehr relevant sind, die kommen in hoher Last und ich kann sie nicht von der Kunden Seite stoppen

Sie haben zwei Möglichkeiten:

  1. Request Filtering
  2. URL Rewriting

Bitte studieren Sie die IIS 7.0 Request Filtering and URL Rewriting Artikel sorgfältig kno w die wichtigsten Dinge über sie. Wenn Ihre Auswahl die erste mit der höchsten Priorität wäre, wäre die <denyQueryStringSequences> nützlich, wenn sie einige Filteranforderungen abdeckt. Und für die Arbeit mit Regex, müssen Sie die zweite verwenden. die folgende Beispielregel kann die Bearbeitung des Antrags unter dem <rewrite> stoppen:

<rule name="Block Bad Request Strings" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions logicalGrouping="MatchAny" trackAllCaptures="false"> 
      <add input="{QUERY_STRING}" pattern="id=([^\"]*[^-]?>)|(?:[^\\w\\s]\\s*\\\/>)|(?:>\") /> 
    </conditions> 
    <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You do not have permission" /> 
</rule> 

Weitere Informationen URL Rewrite Module Configuration Reference