我使用 Ajax (jQuery) 和 POST 方法来更新数据库中的数据。我执行以下操作:
- 从表单中获取数据:user_id, entry_id, content,...
- 将它们发送到将处理数据的 URL。
- 如果数据有效,我们会将它们记录在我们的数据库中。
我不知道如何验证用户是从我的网站而不是从其他地方发送数据。请帮我解决这个问题。谢谢 !
您正在尝试防御CSRF攻击。
标准的防御是在 POST 中有一个从不同的 AJAX 请求中检索到的令牌。由于浏览器的跨域防御,域外的 Javascript 将无法获取令牌。
这里有几个问题:
决定你需要做什么。第一个应该能够通过 cookie、HTTP 身份验证(浏览器也为 AJAX 请求发送)或一些自定义方法(例如包含身份验证的额外参数)来处理
CSRF 是另一回事,但您可以通过确保请求真正通过 AJAX 而不是通过正常的表单发布来轻松避免它。这应该可以通过添加一个额外的标头来实现,该标头无法通过制作 HTTP 表单添加(注意:并非所有标头都可以通过 Javascript 添加,请尝试使用 X-Header)。
另一种可能性是首先不使用表单编码的帖子;如果您希望正文中有一个 JSON 对象,该对象不能来自其他站点,因为浏览器通常不会通过 HTTP POST 发送它。