3

我使用 Ajax (jQuery) 和 POST 方法来更新数据库中的数据。我执行以下操作:

  • 从表单中获取数据:user_id, entry_id, content,...
  • 将它们发送到将处理数据的 URL。
  • 如果数据有效,我们会将它们记录在我们的数据库中。

我不知道如何验证用户是从我的网站而不是从其他地方发送数据。请帮我解决这个问题。谢谢 !

4

2 回答 2

5

您正在尝试防御CSRF攻击。

标准的防御是在 POST 中有一个从不同的 AJAX 请求中检索到的令牌。由于浏览器的跨域防御,域外的 Javascript 将无法获取令牌。

于 2009-12-20T15:39:53.310 回答
1

这里有几个问题:

  1. 对正在执行操作的用户进行身份验证和授权
  2. 防止 CSRF。

决定你需要做什么。第一个应该能够通过 cookie、HTTP 身份验证(浏览器也为 AJAX 请求发送)或一些自定义方法(例如包含身份验证的额外参数)来处理

CSRF 是另一回事,但您可以通过确保请求真正通过 AJAX 而不是通过正常的表单发布来轻松避免它。这应该可以通过添加一个额外的标头来实现,该标头无法通过制作 HTTP 表单添加(注意:并非所有标头都可以通过 Javascript 添加,请尝试使用 X-Header)。

另一种可能性是首先不使用表单编码的帖子;如果您希望正文中有一个 JSON 对象,该对象不能来自其他站点,因为浏览器通常不会通过 HTTP POST 发送它。

于 2009-12-20T15:46:57.763 回答