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

  • 从表单中获取数据:用户 ID、条目 ID、内容、...
  • 将它们发送到将处理数据的 URL。
  • 如果数据有效,我们会将其记录在我们的数据库中。

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

有帮助吗?

解决方案

你正试图防御 CSRF 攻击。

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

其他提示

这里有几个问题:

  1. 执行操作的用户的身份验证和授权
  2. 防范 CSRF。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top