我正在从编程迁移到'网络编程',所以这可能听起来太基本了
我的问题是关于“受害者网站”响应的HTTP请求,其中一些“非公开/敏感”信息为HTML或XML或JSON。
受害者网站只是依赖会话cookie进行身份验证,然后才响应http请求的“非公开”信息。
如果黑客的网站有一个JS向“受害者网站”发出ajax HTTP请求,并且用户已经登录到“受害者网站”,因此在浏览器中有受害者网站的cookie。
ajax请求是否会被“受害者服务器”响应,如果是这样,黑客JS会将此“非公开”信息发回黑客网站。
如何防止这种情况?
答案 0 :(得分:2)
您不能通过AJAX向其他域发出请求,而不是执行带有AJAX的JS的域。
如果受害者的网站是example.com
而黑客的网站是example2.com
,则来自example2.com
的JS文件无法向example2
以外的其他网站发出AJAX请求。
来自受害者服务器的客户端所拥有的cookie不会在HTTP请求中发送到黑客的服务器。如果受害者的网站有一个可被利用的XSS从该网站向黑客发送cookie,则可能会被盗。
答案 1 :(得分:0)
维基百科有一些建议:http://en.wikipedia.org/wiki/Csrf
保持会话Cookie生命周期短。如果您在15分钟不活动后退出,则不太可能成为问题的受害者。不是很友好,但根据您的数据价值需要考虑。
检查Referer:标头以查看它们是否来自您的网站。不是很好。甚至都不好。但它确实存在。
使用特定于用户的表单内容来防止攻击者创建一个简单的表单POST:Understanding the Rails Authenticity Token这个机制非常棒,如果您的框架可以帮助您,那么您的结果几乎是无痛的。如果你的框架没有帮助你,那么考虑一个更好的框架是另一个理由。 :)
答案 2 :(得分:0)
在这样的浏览器故障旁边,most browsers也支持'cross domain resource sharing',它也可以与xmlhttprequests一起使用。当完成正确的方式时,跨域ajax可以非常安全。
但是,“jsonp”的成功似乎阻碍了CORS的采用;动态插入的脚本包含json中包含在回调参数中的数据,这些脚本不受同一域principel的限制。这样做的安全方式(即防止攻击者网站从受害者站点动态插入和执行脚本,以确保cookie确实将被发送的登录用户)更加困难(在每个请求中需要一个类似会话的令牌)这不在cookie中。)
结论:使用传统的ajax进行读取操作是安全的,对于写入和放大jsonp你必须做一些额外的工作才能安全。如果你真的想跨域,你应该把CORS看成是jsonp的替代品。