2017-05-17 2 views
0

Ich würde mich interessieren zu wissen, wie Leute dieses Problem behandelt haben.Ajax-Aufruf an WebAPI - Wie verhindert man das Versenden der Schaltfläche "Senden"?

Ich habe eine Website mit einem einzigen Formular (mit divs zum Anzeigen/Ausblenden von Abschnitten, so dass es wie drei Seiten aussieht) und einem Absenden-Button. Das Formular wird über jQuery AJAX POST an meine WebAPI-Methode übergeben. Ich möchte nicht, dass die Leute in der Lage sind, den POST mehrmals in schneller Einreichung zu senden.

Ich deaktiviere die Submit-Taste, wenn ich darauf klicke, aber dies verhindert nicht, dass jemand ein Skript in die Konsole schreibt, um diese Methode wiederholt aufzurufen. Sie können sich das Javascript ansehen, die URL sehen und POST dazu.

Ich habe über API-Schlüssel gehört, aber ich denke nicht, dass sie hier gelten, da es keine Anmeldung auf der Website gibt. Und wenn es wäre, wäre der Schlüssel immer noch für wiederholte Anfragen erforderlich.

Ich könnte ein CAPTCHA verwenden nehme ich an ... aber welche anderen Optionen sind verfügbar?

Antwort

0

Die nützlichste Sache wäre csrf Tokens in Form verwenden. CSRF-Token wird nach jedem Senden des Formulars aktualisiert.

Sie können Wiederholungsanfragen leicht verhindern.

Weitere Informationen finden Sie hier https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet

+0

Bitte etwas mehr Detail geben, Erinnern ist dies ein AJAX Post. Wie weiß der Server, dass nachfolgende POSTs mit demselben Token ignoriert werden sollen? Gibt es eine WebAPI-DataAnnotation? – VictorySaber

+0

@VictorySaber Sie müssen den csrf-Wert nach der ersten Übermittlung ändern und das neue CSRF-Token neu generieren. Hier ist ein Link, der Ihnen eine Idee gibt, wie Sie mit Tokens umgehen können. https://gist.github.com/zialdo/3454607 –

+0

Angenommen, das ist clientseitig, was soll jemanden daran hindern, auch die Token-Generierungsmethode aufzurufen? z.B. getToken(); postForm (Token) in der Konsole? – VictorySaber

Verwandte Themen