CSRF跨站请求伪造
1.本质:代码层次上将,CSRF能攻击成功是攻击者能猜到你重要参数,因而伪造请求。
2.原理:CSRF攻击建立在浏览器和web服务器的会话之中,并且能欺骗用户访问url。发起的目标是通过伪造的用户请求,该请求不是用户想发出去的请求,服务器或服务来说,该请求是完全合法的请求,但却完成了攻击者的期望操作。
3.局限性(前提条件):
a.目标站点不能有检查referer头的操作,或许被攻击者的浏览器允许referer欺骗。
b.攻击者必须在目标站点找到啊一个表单的提交入口,或者有类似的URL(例如用来转钱,修改受害者邮箱或者密码)
c.攻击者必须觉得所有的表单或者URL参数中的正确的值;如果有秘密验证值或者ID,攻击者没有猜对,攻击很可能不成功。
d.攻击者必须诱使受害者访问有恶意代码的页面,并且此时受害者已经登录到目标站点。
4.常见攻击手段:
A.CSRF作用范围内的威胁:
a.论坛的交互区。如用户提交的一些图像,url指向一个恶意网址,很可能导致CSRF攻击。且这些请求无法自定义HTTP Header,必须使用GET方法。
b.web所有者的攻击。指拥有自己独立域名,HTTPS证书和web服务器的个人,一旦访问其所在域名,攻击者可同时用GET和POST方法发起跨站请求,即为CSRF攻击。
c.网络攻击者。指能控制用户网络连接的恶意代理,如通过控制无限路由或DNS服务器控制用户的网络连接,该攻击需要更多的准备及资源。
B.CSRF作用范围外的威胁(联合攻击):
a.跨站脚本(XSS)。如果网站本身存在XSS漏洞,那么CSRF的防御将毫无意义,因为用户会话的完整性和保密性已经告破。
b.恶意软件。如果用户在攻击者电脑或者移动端设备上运行着恶意软件,那么攻击者可以控制用户的浏览器,向那些可信的网站注入脚本,那么所有基于浏览器的防御策略都会失效。
c.证书错误。如果用户的HTTPS证书错误时,还继续点击访问,那么HTTPS能提供的安全防护措施毫无意义,也包括CSRF。
d.钓鱼。访问钓鱼网站时,用户输入的个人信息,很可能导致钓鱼攻击。
5.CSRF常见防御方法:
a.验证码方式(不完全解决)。验证码强制用户必须和应用进行交互,才能完成最终的请求,在一定程度上能遏制CSRF攻击。
b.查看Referer(不完全解决)。查看请求源,一般来说,Referer的值必须为当前表单所在页面,若不在此页面,则可能遭受CSRF攻击。(不靠谱原因:服务器并非随时都能获得Referer,只能监控是否发生,并且不能防范统一域上的CSRF攻击)
c.设置Token值。从本质入手,本质上说,CSRF是攻击者猜到了你的重要参数,那么根本解决办法就是参数加密,或者用一次性随机值代替。典型的就是Token的设计。
Token是一个随机参数,不可预测,需同时放在表单和session中,提交请求时服务器只需验证表单中Token与用户Session中的Token是否一致即可。(Token防御CSRF时的详细步骤:
1.每次用户登录会随机生成一段字符串,并存储在Session中。
2.在敏感操作中假如隐藏标签,value即为Session中保存的字符串。
3.提交请求后,服务器端的Session中字符串与提交的Token对比,如果一直,课认为是正常请求,否则可能是CSRF攻击
4.更新Token。)