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