2011-01-21 60 views
0

我从编程到“网络编程”迁移,所以这可能听起来太基本关于CSRF的一个基本问题攻击

我的问题是关于由“受害网站”与一些“非响应HTTP请求公开/敏感“信息,如HTML或XML或JSON。

受害者网站只是依靠会话cookie进行身份验证,然后以http请求的“非公开”信息回复。

如果黑客的网站有一个JS让ajax HTTP请求到“受害者站点”,并且用户已经登录到“受害者站点”并因此在浏览器中为受害者站点拥有cookie。

ajax请求是否会被“受害者服务器”响应,如果是这样,黑客JS会将这个“非公开”信息发回给黑客网站。

如何防止这种情况?

回答

2
  1. 您不能通过AJAX向其他域执行请求,而不是执行带有AJAX的JS的域。

    如果受害人的网站是example.com和黑客的网站是example2.com然后从example2.com JS文件不能使一个AJAX请求到另一个网站比example2外。

  2. 来自客户端受害者服务器的cookie不会在HTTP请求中发送给黑客服务器。如果受害者的网站有一个XSS可以被利用来将cookies从该网站发送给黑客,则Cookie可能会被盗。

+0

非常感谢... – Tiwari 2011-01-21 11:42:38

0

维基百科有意见的几个简单的位:http://en.wikipedia.org/wiki/Csrf

保持你的会话cookie寿命短。如果您在闲置15分钟后退出,您不太可能成为问题的受害者。不是很友好,但是可以根据数据的价值来考虑。

检查Referer:标题看到他们来自您的网站。不是很好。甚至不好。但是这是一些东西。

使用用户特定的表单内容来防止攻击者创建一个简单的表单POST:Understanding the Rails Authenticity Token这种机制非常棒,如果你的框架可以帮助你,那么在你的结尾几乎是毫不费力的。如果你的框架不能帮助你,那么考虑一个更好的框架是另一个理由。 :)

0

严格意义上的ajax(xmlhttprequest),实际上通常被认为是限于同一个域,但很多(如果不是所有的话)取决于浏览器实现安全模型的方式。我注意到的一件事是,即使使用正常(非跨域)ajax,Firefox也会发出跨域请求,但会阻止来自整个响应(看起来会中止请求,导致http 206响应代码)。这意味着至少在firefox中,即使对于正常的ajax,“写入调用”也需要受到保护以防止CSRF攻击。

在这样的浏览器故障旁边,most browsers也支持'cross domain resource sharing',它也可以用于xmlhttprequests。当完成正确的方式时,跨域ajax可以非常安全。

但是采用CORS似乎受到'jsonp'成功的阻碍;动态插入的包含回调参数的json中包含数据的脚本不受相同域原则的限制。以这种安全的方式(即防止攻击者站点动态地插入并执行受害者站点中的脚本,以便登录用户确实将cookie发送给cookie)比较困难(需要每个请求中的会话相似令牌这不在cookie中)。

结论:使用传统ajax的读取操作是安全的,对于写入& jsonp您必须做一些额外的工作才能安全。如果你真的想跨域,你应该看看CORS作为jsonp的替代品。