POST方法,Ajax和安全性?

时间:2009-12-20 15:36:08

标签: jquery ajax security http-post

我使用Ajax(jQuery)和POST方法来更新数据库中的数据。我做了以下事情:

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

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

2 个答案:

答案 0 :(得分:5)

你正试图抵御CSRF攻击。

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

答案 1 :(得分:1)

这里有几个问题:

  1. 正在执行操作的用户的身份验证和授权
  2. 防止CSRF。
  3. 决定你需要做什么。第一个应该能够通过cookie,HTTP身份验证(浏览器也为AJAX请求发送)或一些自定义方法(例如包含身份验证的额外参数)来处理

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

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