0

ここで修正できない小さな問題があります。この投稿は完了しますが、応答で「500 内部サーバー エラー」が返されます。</p>

誰がそれを修正しますか?

CI フォーラムで検索した後、このリンクcodeigniter-csrf-protection-with-ajax を見つけましたが、それで解決できません。

4

1 に答える 1

4

アクションを機能させるには、AJAX POST 要求に csrf キーを含める必要があります。

ただし、データを取得しているだけなので、method:'get'代わりにを使用するmethod:'post'と、トリックが実行され、リクエストが機能するはずです。

POST をいつ使用し、いつ GET を使用するかについての素晴らしい議論については、この質問を参照してください。

実際、サーバーにデータを POST することを計画していて、CSRF キーの欠如について不平を言う場合は、それをリクエストに追加する 2 つの方法があります。

  • プラグインを使用して、プロトタイプが codeigniter によって設定されている csrf Cookie からデータを抽出できるようにします。これはよりエレガントかもしれませんが、スクリプト全体にもう少し追加されます。プロトタイプhttp://codeinthehole.com/writing/javascript-cookie-objects-using-prototype-and-json/で Cookie にアクセスする方法の詳細が記載された投稿を次に示します。

  • このリクエストを既存のフォームから送信する場合は、キーを含む非表示の入力フィールドが必要であり、次のような方法で簡単にアクセスできますvar csrf = $("input[name=csrf_key]").val();(これは jQuery 構文ですが、プロトタイプ バージョンは「遠すぎます)。そのページにフォームがない場合はecho form_open(); form_close();、隠しフィールドが CI によって確実に出力されるようにどこかに書き込んでください。

最後に、その値を POST リクエストと一緒に送信して、サーバーをハックしたくないクールな男であることを確認してください。このパラメーターを JS の ajax リクエストに追加する必要があります。

parameters: {'csrf_key' : csrf}

csrf は、(Cookie または非表示の入力から) キーを取得した変数です。名前が大丈夫であることを確認してください!Cookie を取得する場合は、Cookie 名が で設定したものと一致していることを確認してconfig/config.phpください。入力トークンについても同様です。

お役に立てれば!

于 2012-04-08T09:23:45.837 に答える