AJAX を使用してユーザー フォームを送信し、AJAX を介したデータ送信を必要とする他のユーザー操作を処理するサイトで、Codeigniter の CSRF 保護を有効にしました。その結果、「アクションは許可されていません」というサーバー側のエラーに遭遇しました。JavaScript が収集して AJAX 経由で送信したデータのみがサーバーに渡され、その結果、CSRF コードが送信されていないことがすぐにわかりました。
生成されたトークン タグは次のようになります。
<input type="hidden" name="csrf_test_name" value="dsflkabsdf888ads888XXXXXX" />
したがって、検証のためにトークンをサーバーに送信する最も簡単な方法は、 csrf_test_name で jQuery セレクターを使用して値を取得し、これをサーバーの投稿データに追加して検証することです。以下のコードに従って:
//get CSRF token
var csrf = $('[name="csrf_test_name"]').val();
//build the form data array
var form_data = {
csrf_test_name: csrf,
... ... ...
... ... ...
}
//send the form data to the server so it can be stored
$.ajax({
type: "POST",
data: form_data,
url: ...,
dataType: "html",
success: function(msg){
... ... ...
}//end success
});//end ajax
サーバーにデータを送信する ajax 送信ごとにこの手順に従いましたが、サーバー側のエラーは修正され、すべて正常に動作します。
これをテストするために、間違った CSRF トークンをハードコーディングしました。サーバーは矛盾を検出し、エラー コード 500 を返すため、表面上はこれが機能します。
私の質問はこれです。これはこれを行う安全な方法であり、従うべきベストプラクティスはありますか? 私はこれについていくつかのグーグル検索を行いましたが、他のすべての方法はより複雑であるように思われます.