Wir hatten vor einigen Monaten einen großen SharePoint-Ausfall, weil ein Benutzer seine Tastatur so eingeklemmt hat, dass die Eingabetaste auf unbestimmte Zeit gedrückt wurde. Der Benutzer befand sich auf einer benutzerdefinierten Personensuchseite, und Hunderte von POSTs desselben Benutzers wurden asynchron übermittelt, wodurch der Server überlastet wurde.
Da ich in einer großen Organisation arbeite, suche ich nach einem globaleren Weg, um dies zu verhindern.
Gibt es eine Möglichkeit, das Übermitteln mehrerer Webformulare durch einen gemeinsamen Benutzer innerhalb kurzer Zeit innerhalb von IIS zu verhindern?
Ich bin mir bewusst, dass wir Javascript schreiben können, um die Schaltfläche nach dem Klicken zu deaktivieren, aber wir hoffen, dass dieses Problem nicht auf anderen Seiten auftritt, auf denen möglicherweise eine ähnliche Möglichkeit besteht.
Update : Wenn Sie den Quellcode betrachten, führt das Javascript eine document.location = url aus, wenn der Schlüsselcode 13 (Enter) gedrückt wird. Auch hier können wir JS schreiben, um dies an dieser Stelle zu verhindern, aber wir möchten auch in der Lage sein, uns allgemeiner vor solchen Problemen zu schützen ... vorzugsweise auf IIS-Ebene.
quelle
Antworten:
Eine Option hierfür wäre die Ratenbegrenzung unter Verwendung von http://www.iis.net/downloads/microsoft/dynamic-ip-restrictions, die so eingestellt werden kann, dass die beleidigende IP für einen festgelegten Zeitraum blockiert wird.
Natürlich möchten Sie die typischen Anforderungen / Sekunde / IP als Basis festlegen, bevor Sie so etwas in die Produktion aufnehmen. Dies sollte jedoch verhindern, dass ein einzelner Benutzer so etwas erneut ausführen kann.
quelle
Wenn das Problem lediglich Auswirkungen aufgrund der Anzahl gleichzeitiger Anforderungen vermeidet, gibt es ein Add-On für IIS 7, Dynamic IP Restrictions. (Diese Funktion ist jetzt in IIS8 integriert.) Es ist möglich, dies für den Nur-Protokoll-Modus zu konfigurieren, um zu bestimmen, welche Auswirkungen es haben würde, bevor die Funktion aktiviert wird.
http://www.iis.net/downloads/microsoft/dynamic-ip-restrictions
Auf Antragsebene sollten mehrere Formularübermittlungen behandelt werden. Mit Masterseiten ist es trivial einfach zu implementieren. Die folgende Abfrage auf der Masterseite führt den Trick für alle untergeordneten Inhaltsseiten aus:
Eine weitere bewährte Methode, die sich möglicherweise lohnt: Post / Redirect / Get
http://en.wikipedia.org/wiki/Post/Redirect/Get
quelle
Sie können ein IIS-Modul auf globaler Ebene schreiben und prüfen, ob dieselbe Anforderung in derselben kurzen Zeit von demselben Benutzer stammt. Dann können Sie entscheiden, ob die Anforderung fortgesetzt werden soll oder nicht.
Hier ist eine gute Anleitung zur Implementierung von IIS-Modulen: http://www.iis.net/learn/develop/runtime-extensibility/develop-a-native-cc-module-for-iis Sie können verwaltete Module auswählen, wenn Sie mehr sind mit .NET vertraut
quelle