防止jQuery $ .post的CSRF和XSRF攻击

时间:2013-05-04 20:22:02

标签: php jquery http-post csrf

我最近遇到了简单的CSRF攻击,并意识到我的很多ajax脚本都是开放的。这些是在我的网站上使用$ .post()访问的。

有没有办法自动为所有这些添加PHP令牌,还是我需要逐个完成并一次性完成?

2 个答案:

答案 0 :(得分:3)

使用bwoebi的答案,我找到了一个更好的解决方案。 jQuery有一个内置的ajax设置功能。<​​/ p>

<script>var token ="<?= $_SESSION['token'] ?>";</script>
<script>
jQuery.ajaxSetup({
    data: {
        token: token
    }
});
</script>

这会将你的令牌添加到每个jQuery请求中!

答案 1 :(得分:1)

一个想法是替换你的$.post函数:

jQuery["post"] = function (url, data, callback, type) {
    data["token"] = token; // where token is a global variable
    // you write in a <script> 'var token = <?php echo $_SESSION["token"]; ?>;'
    return jQuery.ajax({ // copied from the jQuery code
        url: url,
        type: "POST",
        dataType: type,
        data: data,
        success: callback
    });
};

所以你只需要在包含jq-lib之后添加这个小代码。