Deaktivieren der POST (Multiple Form Submit) in IIS

7

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.

user1209640
quelle
2
JavaScript zu jeder Seite hinzufügen?
Michael Hampton
Vielen Dank für den Kommentar, aber leider ist unsere SharePoint-Farm sehr groß, da viele Entwickler ihren eigenen benutzerdefinierten Code schreiben. Wir hoffen auf eine Lösung auf niedrigerer Ebene in IIS.
user1209640
1
Verbesserte Benutzerschulung also?
Michael Hampton
1
Ich bin überrascht, dass auf einem Webserver wie IIS nichts erreichbar ist, zumal es viele Community-Anbieter gibt, die ASP.Net für das öffentliche Internet bereitstellen, und wie einfach es für einen Entwickler sein könnte, fehlerhaftes Javascript zu schreiben könnte versehentlich einen Server herunterfahren. Ich denke, das Problem, das ich beschreibe, könnte einem versehentlichen DDOS-Angriff ähneln.
user1209640
1
Sie müssten einen Weg finden, um mehr als 'x' Verbindungen von einer IP-Adresse zu blockieren. Wobei x größer ist als die Anzahl gleichzeitiger Verbindungen, die normalerweise für eine Standardanforderung mit einem zusätzlichen Puffer verwendet werden (oder Sie würden die Anzahl aus Sicherheitsgründen wahrscheinlich nur verdreifachen). Wahrscheinlich müssten Sie eine Art Firewall-Gerät zwischen Endbenutzern und den SharePoint-Servern verwenden ... Hochwasserschutz wird von einigen Firewalls so genannt.
Ashley

Antworten:

2

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.

Nathan V.
quelle
2

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

  • Nahtlose Integration in IIS 7.0 Manager.
  • Dynamisches Blockieren von Anforderungen von der IP-Adresse basierend auf einem der folgenden Kriterien:
    • Die Anzahl der gleichzeitigen Anforderungen.
    • Die Anzahl der Anfragen über einen bestimmten Zeitraum.
  • Unterstützung für die Liste der IPs, die die Filterung der dynamischen IP-Einschränkung umgehen dürfen.
  • Das Blockieren von Anforderungen kann auf Website- oder Webserverebene konfiguriert werden.
  • Durch konfigurierbare Verweigerungsaktionen können IT-Administratoren angeben, welche Antwort an den Client zurückgegeben werden soll. Das Modul unterstützt die Rückgabestatuscodes 403, 404 oder das Schließen der Verbindung.
  • Unterstützung für IPv6-Adressen.
  • Unterstützung für Webserver hinter einem Proxy oder einer Firewall, die die Client-IP-Adresse ändern können.

Dynamische IP-Einschränkungen in Aktion

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:

$("form").submit(function () {
    $(":submit", this).attr("disabled", "disabled");
});  

Eine weitere bewährte Methode, die sich möglicherweise lohnt: Post / Redirect / Get

http://en.wikipedia.org/wiki/Post/Redirect/Get

Greg Askew
quelle
0

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.

class CGlobalTestFilterModule:public CGlobalModule
{
public:
    GLOBAL_NOTIFICATION_STATUS 
        OnGlobalPreBeginRequest(IN IPreBeginRequestProvider * pProvider)
    {
    ...
   }
...
}

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

hassan.monfared
quelle
Vielleicht finden Sie ein gebrauchsfertiges Modul in der Liste der IIS 7-Erweiterungen: iis.net/downloads/category/handle-requests
hassan.monfared