2010-06-04 15 views
17

Was passiert, wenn ein Benutzer meine JavaScript-Datei anschaut, den Inhalt einer Funktion kopiert und mit AJAX eine Anfrage an meinen Server sendet? Und gibt es einen Weg, sich davor zu schützen?AJAX-Anrufe sichern

Antwort

15

Der Weg, vor diesem zu schützen, unterscheidet sich nicht von der Art, wie Sie vor jeder Web-Anfrage geschützt haben. Sie machen es so, dass Ihre Site eine Form der Authentifizierung erfordert (d. H. Benutzer müssen sich anmelden) und machen nichts, wenn die Anfrage nicht richtig authentifiziert ist.

Wenn Sie eine AJAX-Anfrage stellen, werden normalerweise auch Cookies mit der Anfrage gesendet, so dass Sie nur die gleiche Authentifizierungsmethode verwenden können, die Sie für Ihre regulären Anfragen mit Ihren AJAX-Anfragen verwenden.

+1

Ahh macht Sinn. Ich wusste nur nicht, ob Browser irgendeine Art von Cross-Domain-Schutz hatten. Danke, Alter. –

+0

Der Browser wird xmlhttprequest von einem anderen Server/Domäne nicht zulassen. Allerdings, wenn Sie JSON-P-Anfragen zulassen, könnte es passieren, auch jemand könnte den Browser spoofen, Anfragen für Ajax wie jeder andere behandeln, wie erwähnt. – Tracker1

9

Laut codeka gibt es keine Möglichkeit zu verhindern, dass jemand eine eigene Ajax-Abfrage erstellt, die mit der in Ihrer Javascript-Anfrage übereinstimmt. Der domänenübergreifende Schutz schützt Sie dort nicht unbedingt, da sie, wenn Sie möchten, das Javascript einfach in die Adressleiste eingeben, während Sie sich auf einer Seite Ihrer Website befinden.

Der einzige Schutz, den Sie haben, besteht darin, die Eingabe und die Parameter zu überprüfen, die durch die Ajax-Abfrage auf der Serverseite bereitgestellt werden. Beschränken Sie jedes PHP- oder Python-Skript oder jedes andere Antwortskript auf eine bestimmte Aufgabe und überprüfen Sie die Eingabe auf der Serverseite. Wenn etwas nicht stimmt, antworten Sie mit einem Fehler.

Kurz gesagt, es gibt keine Möglichkeit, jemanden daran zu hindern, die Anfrage zu senden, aber Sie können verhindern, dass sie etwas tun, was Sie auf dem Server nicht tun sollen.

+4

Bedeutet das, dass man mit AJAX niemals eine sichere * und * generalisierte CRUD-Architektur erstellen kann? – dclowd9901

0

Unter der Annahme, dass Sie irgendeine Form der Authentifizierung benötigen:

Ich denke, man Datenbanksitzung beibehalten kann zu überprüfen, ob die Anforderung von einem echten Benutzer kommt für geschmiedet. Verwenden Sie verschlüsselte Cookies, um die Sitzungs-ID zu speichern, und verweisen Sie die Cookie-Sitzungs-ID zur Validierung des Benutzers an die Datenbank.