0

有没有办法通过 ajax 注入代码或伪造信息?

喜欢将 Ajax 从我的网站发送到另一个使用 ajax 的网站?

如果是这样,我怎样才能防止我只能从我的网站发送 ajax?

4

1 回答 1

2

您可能正在寻找 CSRF(跨站点请求伪造)保护。问题是您的站点不知道 AJAX 请求来自何处。普遍接受的解决方案是创建一个从您的站点发送的令牌,该令牌需要与 AJAX 请求一起发送。

此令牌对于用户会话是唯一的,并在您页面的 HTML 中的某处输出。这使得其他站点难以捕获此令牌。

为了给你基本的想法,你会做这样的事情:

$_SESSION['csrf_token'] = md5(uniqid(rand(), TRUE));

然后,例如,您可以将其输出为 JavaScript 变量

<script>
window.CSRF_TOKEN = '<?php echo $_SESSION['csrf_token']; ?>';
</script>

如果您碰巧使用的是 jQuery,则可以使用ajaxSend()将令牌添加到每个请求

$.ajaxSend(e, jqXHR, settings) {
  if (!settings.data) settings.data = {};
  settings.data['csrf_token'] = window.CSRF_TOKEN;
}

最后,在后端,您将检查$_REQUEST['csrf_token'] ==$_SESSION['csrf_token']` 以验证请求。如果可能的话,一次性使用这些令牌通常是一个好主意。存储生成令牌的时间并确保在合理的时间范围内使用它也是一个好主意。

于 2012-11-10T14:44:24.150 回答