Ich bin ein wenig verwirrt, wie Cross-Site-Fälschungen zu verhindern. Immer noch. Ich weiß, dass es eine Fülle von Informationen gibt, aber ich bin verwirrt.Cross-Site-Fälschung auf AJAX-Service
In Steven Anderson's post er beschreibt eine Form wie folgt aus:
<body onload="document.getElementById('fm1').submit()">
<form id="fm1" action="http://yoursite/UserProfile/SubmitUpdate" method="post">
<input name="email" value="[email protected]" />
<input name="hobby" value="Defacing websites" />
</form>
</body>
auf einem fremden Ort.
Die angegebene Lösung ist ein "Anti-Fälschungs" -Token, das vom Server generiert wird und an das in versteckter Form alle Anfragen zurückgeschickt werden. Das ist cool, aber was soll den Hacker daran hindern, nur die Formularseite herunterzuladen, das Token zu extrahieren und es zu POSTIEREN?
Meine Bewerbung dafür lautet: Bei der Anmeldung für meine Website möchte ich eine AJAX-Funktion, die den aktuell eingegebenen Benutzernamen an den Server sendet, der "True/False" antworten soll, wenn er verfügbar ist oder nicht. Dies geschieht onKey, so dass der Benutzer einen Benutzernamen auswählen kann, der noch nicht verwendet wurde. Die Schaltfläche Senden wird aktiviert, wenn alle Bedingungen für "neuer Benutzer" erfüllt sind.
Offensichtlich ist dies eine Gelegenheit für einen Hacker, den Dienst zu verwenden, um viele Benutzernamen zu "prüfen", um zu sehen, ob sie verfügbar sind - ich weiß, es ist nicht genau Internet-Banking-Ebene Art von Risiko, aber ich möchte immer noch bedienen nur Anfragen von meiner Anwendung, kein Hacker.
Irgendwelche Ideen wie über diese Fragen?
UPDATE:
Also in meinem Szenario. Ich erzeuge ein Token (sagen wir einen Hash-Wert der IP-Adresse des Clients) und der Dienst erwartet, diese zurück zu erhalten, wenn es die Information gibt, ob der Benutzername verfügbar ist oder nicht.
- Das Problem bleibt, jemand aus der Domäne ruft einfach den Dienst an, z.B. /generateToken
Dies sieht auf die IP des Kunden ... könnte ein Hacker sein, der weiß.
Returns
{ token: 4uru32br }
die dann an den/isUsernameAvailable vorgelegt wird? Token = 4uru32br & partialUsername = usernam
Wo das mir bekommt?
"aber was soll der Hacker stoppen, indem er einfach die Formularseite herunterlädt, das Token extrahiert und es postet?" Ein Hacker wird seinen eigenen Token statt des Opfers abschreiben. – PeeHaa
Beachten Sie auch, dass ein CSRF-Token keine Anmeldeversuche einschränkt, da dies ein völlig anderes Problem ist als die Anfragefälschung. – PeeHaa