我正在编写一个主要由ajax驱动的Web应用程序,我正在研究如何保护用户免受CSRF攻击。我打算运行用户登录的应用程序页面,以便在HTTPS模式下完成工作。
在HTTPS上运行页面是否可以防止CSRF攻击?
答案 0 :(得分:19)
不,在HTTPS上运行页面并不能保护它不受CSRF的影响。浏览器和服务器之间的通信加密这一事实与CSRF无关。
我建议您在preventing CSRF上阅读OWASP指南。
答案 1 :(得分:2)
一般的黄金法则是:
永远不要相信传入的客户端请求是合法的。始终保持怀疑,并认为该请求可能被恶意伪造。
除了上述OWASP文章之外,几乎没有具体规则:
如果您的数据需要身份验证/授权,请避免服务器上的通用接口,例如CRUD接口。易于编码,难以授权来自客户的特定请求。相反,提供一个SOA风格的接口,其中包含专用于特定用例的显式方法,您可以直接控制请求及其参数。
即使框架提供了对请求有效性的某些控制(ASP.NET viewstate),再次检查用户是否有权传递传入参数集。
答案 2 :(得分:0)
最好的解决方案是在提交给服务器的表单中包含秘密令牌 - 识别用户。有关详细信息,请参阅以下链接。
http://en.wikipedia.org/wiki/Cross-site_request_forgery
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
http://www.codinghorror.com/blog/2008/10/preventing-csrf-and-xsrf-attacks.html
答案 3 :(得分:0)
我会尝试解释:
•HTTPS阻止来自同一网络的某人获取您的会话KEY / ID。假设他们获得了您的会话标识密钥/ ID,然后可以根据需要伪造您的IP,并将所有想要的POST请求发送回服务器。 使用HTTPS加密所有HTTP正文(整个“ HTML”)。因此,不会猜测任何会话密钥。
•CSRF中发生的事情是用户单击链接,这还会创建到另一台服务器的请求并与之通信,例如使用用户的会话但不在同一网络上。意味着它无法收听服务器回复给用户的内容。如果攻击者知道答复并可以传达答复,请瞧。没问题。用户帐户上没有钱。但是,如果服务器向与该会话关联的IP发送随机令牌,那么攻击者将无法在其他网络上猜测它!
答案 4 :(得分:0)
https不能保护您的应用免受xss攻击。您需要csrf令牌,该令牌应该经过(1)加密(2)一段时间后过期(3)基于页面和时间的CSRF令牌