1.CSRF的基本概念、缩写、全称
CSRF(Cross-site request forgery):跨站请求伪造
用户是网站A的注册用户,且登录进去,于是网站A就给用户下发cookie
从上图可以看出,要完成一次CSRF攻击,受害者必须满足两个必要的条件:
1.登录受信任网站A,并在本地生成cookie。(如果用户没有登录网站A,那么网站B在诱导的时候,请求网站A的api接口时,会提示你登录)
2.在不登出A的情况下,访问危险网站B(其实是利用了网站A的漏洞)
举个例子:前段时间里,微博网站有个api接口有漏洞,导致很多用户的粉丝暴增。
CSRF的防范措施:
方法一:token验证(用的最多)
1.服务器发送给客户端一个token
2.客户端提交的表单中带着这个token
3.如果这个token不合法,那么服务器拒绝这个请求
方法二:隐藏令牌
把token隐藏在http的head中(方法二和方法一有点像,本质上没有太大区别,只是使用方式上有区别)
方法三:Referer验证
Referer指的是页面请求资源。意思是,只接受本站的请求,服务器才做响应,如果不是,就拦截
2.XSS的攻击原理
XSS攻击的核心原理是:不需要你做任何的登录验证,它会通过合法的操作(比如在url中输入,在评论框中输入),向你的页面注入脚本(可能是js、html代码块)
最后导致的结果是:
1.盗用cookie
2.破坏页面的正常结构,插入广告等恶意内容
3.D-doss攻击
XSS的防范措施:
1.编码
对用户输入的数据进行HTML Entity编码
比如说这段代码:
<script>alert(1)</script>
若不进行任何处理,则浏览器会执行alert的js操作,实现XSS注入
2.过滤
移除用户输入和事件相关的属性。如onerror可以自动触发攻击,还有onclick
移除用户输入的style节点,script节点、iframe节点(尤其是script节点,它是可以支持跨域的,一定要移除)
3.校正
避免直接对HTML Entity进行编码
使用Dom parse 转换,校正不配对的DOM标签
3.CSRF和XSS的区别
区别一:
CSRF:需要用户先登录网站A,获取cookie
XSS:不需要登录
区别二:
CSRF:是利用网站A本身的漏洞,去请求网站A的api
XSS:是向网站A注入js代码,然后执行JS里的代码,篡改网站A的内容