2012-04-08 8 views

Antwort

3

Sie sollten den csrf-Schlüssel in Ihre AJAX POST-Anfrage aufnehmen, damit die Aktion funktioniert.

Sie erhalten jedoch nur Daten, also sollte die Verwendung von method:'get' anstelle von method:'post' den Trick machen und Ihre Anfrage funktionieren lassen.

See this question for a wonderful discussion on when to use POST and when to use GET

Wenn Sie sind in der Tat, die Planung auf Daten an den Server Posting, und es beschwert sich über den Mangel an der CSRF Schlüssel gibt es zwei Möglichkeiten, um es auf die Anfrage hinzuzufügen:

  • Verwenden Sie ein Plugin, um dem Prototyp zu ermöglichen, die Daten aus dem csrf-Cookie zu extrahieren, das von codeigniter gesetzt wird; Das könnte eleganter sein, würde aber Ihre Gesamtskripte etwas erweitern. hier ist ein Beitrag mit mehr Details auf, wie Cookies für den Zugriff auf in Prototyp http://codeinthehole.com/writing/javascript-cookie-objects-using-prototype-and-json/

  • wenn Sie diese Anforderung aus einer bestehenden Form senden, es sollte ein verstecktes Eingabefeld mit dem Schlüssel hat, die Sie in der Lage sein würden, einfach Zugriff mit etwas wie var csrf = $("input[name=csrf_key]").val(); (Dies ist jQuery-Syntax, aber ich bin mir sicher, dass die Prototyp-Version nicht zu weit weg ist). Wenn auf dieser Seite kein Formular vorhanden ist, schreiben Sie einfach eine echo form_open(); form_close();, um sicherzustellen, dass das versteckte Feld von CI ausgedruckt wird.

Schließlich stellen Sie sicher, dass Sie diesen Wert neben der POST-Anforderung senden, um sicherzustellen, dass Sie cooler Typ sind, der nicht will, um den Server hackz0r.

parameters: {'csrf_key' : csrf} 

Wo csrf die Variable ist, in dem Sie den Schlüssel geholt (aus dem Cookie oder von dem verborgenen Eingang): Sie sollen diese Parameter auf den Ajax-Request in JS hinzuzufügen. Stellen Sie sicher, dass die Namen in Ordnung sind! Stellen Sie beim Abrufen des Cookies sicher, dass der Name des Cookies mit dem in config/config.php festgelegten übereinstimmt. Gleiches gilt für das Eingabe-Token!

Hoffe, das hilft!