我最近受到了一次简单的 CSRF 攻击,并意识到我的很多 ajax 脚本都是开放的。这些可以在我的网站上使用 $.post() 访问。
有没有办法自动将 PHP 令牌添加到所有这些中,还是我需要一个接一个地完成所有这些?
使用 bwoebi 的答案,我找到了一个更好的解决方案。jQuery 有一个内置的 ajax 设置函数。
<script>var token ="<?= $_SESSION['token'] ?>";</script>
<script>
jQuery.ajaxSetup({
data: {
token: token
}
});
</script>
这会将您的令牌添加到每个 jQuery 请求中!
一个想法是替换您的$.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 之后添加这个小代码。