2

CI2.1アプリケーションでCSRFをajaxで動作させようとしています。

私はこれについて検索し、いくつかのガイドラインを見つけましたが、問題を解決できません http://ericlbarnes.com/post/10728867961/codeigniter-csrf-protection-with-ajaxhttp://www.beheist.com/index 。 php / en / blog / csrf-protection-in-codeigniter-2-0-a-closer-look http://aymsystems.com/ajax-csrf-protection-codeigniter-20

設定の2つのトークン値に2つの異なるトークンを設定しました

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'token01';
$config['csrf_cookie_name'] = 'token02';
$config['csrf_expire'] = 7200;

これが私の見解です、私はform_openを使用しています

<?php echo form_open("http://localhost/pis/user"); ?>
<div id="inputs">

<?php echo form_input($username);?>
<?php echo form_password($password);?>
</div>


<div id="actions">

<div style="float:left"><?php echo form_submit($submit);?>

<!-- <input type="button" value="Login" id="submit" name="submit" onclick="clicksubmit()" /> -->

</div>

</div>

<?php echo form_close();?>

私はこのJavaScriptを使用して非同期呼び出しを行っています

<script type="text/javascript">
$(document).ready(function(){


      $("#submit").click( 

        function(){
            var form_data = {
                username: $("#username").val(),
                password: $("#password").val(),
                csrf_token_name: $("input[name=token01]").val()
            };


            $.ajax({
            type: "POST",
            url: "http://localhost/pis/user",
            data: form_data,
            success: 
              function(data){
                $("#debug").html(data.message).css({'background-color' : data.bg_color}).fadeIn('slow'); 
              }

            });

          return false;

        });


    });

</script>

これを実行すると、応答として「エラーが発生しました。要求したアクションは許可されていません」とともに「500内部サーバーエラー」が発生します。FirebugはPOSTデータパラメータを正しく表示します。

例:username = root&password = root&csrf_token_name = 31961f17de5fa2df657ab1aba880f718

ただし、csrfを削除した場合、ajaxリクエストは正常に実行され、応答として200が返されます。

誰か助けてくれませんか?

4

1 に答える 1

0

さらに良いことに、jQuery にフォーム データをシリアル化させることもできます。

var form_data = $(this).serialize();

これにより、入力の名前が変更されたり、フィールドが追加されたりすることを心配する必要がなくなります。

于 2012-10-15T09:23:49.470 に答える