Ajax Sicherheit (hoffe ich)

8

Ich baue ein Browser-Spiel und verwende eine große Menge an Ajax statt Seitenaktualisierungen. Ich benutze PHP und Javascript. Nach viel Arbeit habe ich gemerkt, dass Ajax nicht genau sicher ist. Die Drohungen, über die ich mich Sorgen mache, sagen, dass jemand Informationen auf meinem SQL-Server nachlesen möchte, die sie nur brauchen, um die richtigen Informationen in meine .php-Datei einzugeben, die meinen Ajax-Anrufen zugeordnet ist. Ich benutzte GET Style Ajax Calls, was eine schlechte Idee war. Nach vielen Recherchen habe ich folgende Sicherheitsmaßnahmen getroffen. Ich wechselte zu POST (das ist nicht mehr sicher, aber es ist ein kleiner Nachteil). Ich habe auch eine Stelle genannt, die wieder gefälscht sein kann, aber wieder eine andere Abschreckung.

Die letzte Maßnahme, die ich habe und ist der Schwerpunkt dieser Frage, wenn meine Website geladen ist, habe ich einen 80 Char-Hex-Schlüssel erzeugt und in der Sitzung gespeichert, und wenn ich den Ajax-Aufruf sende, sende ich auch die Herausforderung Schlüssel in Form von

%Vor%

Wenn die ajax php-Datei dies liest, prüft sie, ob die gesendete Herausforderung mit der Sitzungsherausforderung übereinstimmt. Jetzt würde das alleine nicht viel tun, weil Sie Firebug einfach öffnen können und sehen, welche Herausforderung leicht gesendet wird. Also, was ich tun muss, ist, sobald diese Herausforderung verwendet wird, erzeugt sie eine neue in der Sitzung.

Meine Frage ist also, wie sicher das ist, von wo aus es aussieht, man konnte nur sehen, was der Herausforderungsschlüssel war, nachdem er gesendet wurde und dann erneuert und sie konnten es nicht wieder sehen, bis es gesendet wurde, was es nicht möglich macht Senden Sie eine gefälschte Anfrage von einer anderen Quelle. So sieht irgendjemand eine Schleife Loch zu dieser Sicherheitsmethode oder irgendwelche zusätzlichen Gedanken oder Ideen.

    
tye 17.03.2011, 13:17
quelle

3 Antworten

1

Siehe die Antwort von 'meagar'.

Ich möchte erwähnen:

Indem Sie in Session eine Kennung übergeben, tun Sie, was die Sitzung bereits macht. Normalerweise gibt es einen Cookie mit einer eindeutigen Kennung, die der von Ihnen erzeugten identisch ist und Ihrer Anwendung im Wesentlichen sagt, wer diese Person ist. So funktionieren PHP-Sessions im Allgemeinen.

Was Sie in diesem Fall tun müssten, ist zu überprüfen, ob für eine bestimmte Anfrage - POST oder GET - der bestimmte Benutzer (dessen eindeutige Benutzer-ID oder ähnliches) in der Sitzung) hat die Berechtigung, mit dieser bestimmten Anfrage hinzuzufügen / zu ändern / zu löschen / was auch immer.

Bei einer Suchanforderung würden Sie also nur Ergebnisse zurückgeben, für die Benutzer X berechtigt ist. Auf diese Weise müssen Sie sich nicht darum kümmern, was sie senden. Wenn der Benutzer keine Berechtigung hat, etwas zu tun, weiß das System, dass er es nicht tun darf.

Daher sollten Sie alle Anfragen authentifizieren.

Jemand kann das gerne hinzufügen.

    
anonymous coward 17.03.2011, 13:41
quelle
10

Ihre Definition von "sicher" ist vage. Sie scheinen weniger daran interessiert zu sein, zu verhindern, dass Daten abgefangen werden, und daran interessiert zu sein, dass Benutzer keine benutzerdefinierten Anforderungen an Ihren Server senden. Das ist keine Sicherheit, das ist nur gutes Anwendungsdesign - Ihr Programm sollte keine Anfragen akzeptieren, die den internen Zustand zum Brechen bringen. Es gibt absolut nichts, was Sie tun können, um zu verhindern, dass Leute irgendwelche Daten einreichen, die sie wollen. Die Lösung besteht darin, die Daten, die sie serverseitig übermitteln, zu validieren und nicht zu verhindern, dass sie die Daten clientseitig übermitteln, was immer fehlschlägt.

  

Ich wechselte zu POST

Sie sollten sich nicht die Mühe machen; Das hat nichts mit Sicherheit zu tun. Verwenden Sie das HTTP-Verb, das für die Anforderung geeignet ist. Suchst du Informationen? Verwenden Sie eine Abrufanforderung. Aktualisieren / Einfügen / Löschen von Informationen? Verwenden Sie post.

  

sagen jemand möchte jemand Informationen auf meinem SQL-Server nachschlagen, sie würden nur richtige Informationen in meine .php-Datei

eingeben müssen

Sie sollten alle Anfragen authentifizieren, um sicherzustellen, dass sie Zugriff auf die Daten haben, die sie abfragen. SSL hilft Ihnen, die Authentifizierung sicher durchzuführen.

  

Wenn meine Website geladen ist, habe ich einen 80 char Hex-Schlüssel generiert und in der Sitzung gespeichert, und wenn ich den Ajax-Aufruf sende, sende ich auch den Challenge-Schlüssel

Das wird nicht helfen. Die gesamte Prämisse Ihrer Frage scheint zu sein, dass der Benutzer Firebug oder ein ähnliches HTTP-Debugging-Tool installiert hat. Wenn dies der Fall ist, wird Ihr Sitzungsschlüssel unbrauchbar.

    
meagar 17.03.2011 13:24
quelle
0
%Vor%     
tye 17.03.2011 18:26
quelle

Tags und Links