CSRF、XSS
CSRF(Cross-site request forgery)
跨站请求伪造,也称XSRF
, 是一种挟制用户在当前已登录的Web应用程序上执行非本意操作的攻击方法。CSRF攻击利用的是冲着浏览器分不清发起请求是不是真正的用户本人。简单的身份验证能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的
例子1:简单的攻击
用户登录银行网址A(保留了cookie)的时候,被某些恶意信息引导访问了网址B,B网址上有一个img标签
<img src="http://www.examplebank.com/account=Alice&amount=1000&payfor=Badman" >
这个标签的src不指向一张图片,而是一个http请求。由于用户浏览器上有cookie信息,此时发出的请求就会得到响应执行
例子2:进阶攻击
危险网站可以伪造一个表单并隐藏,并在自己网站的onload
事件中,触发这个表单的提交事件,就可以改GET攻击为POST攻击
防范手段
- 涉及敏感操作的请求改为POST请求
- 优:提高了攻击的门槛
- 缺:对于进阶攻击无能为力
- 验证码机制
- 优:简单粗暴,低成本,可靠,能防范99.99%的攻击者
- 缺:对用户不友好
- 验证 HTTP Referer 字段(在
HTTP
请求头中有一个字段叫Referer
,它记录了请求的来源地址。 服务器需要做的是验证这个来源地址是否合法,如果是来自一些不受信任的网站,则拒绝响应)- 优:零成本,易实现
- 缺:由于这个方法严重依赖浏览器自身,因此安全性全看浏览器
- token(或token+密文)
- 优:极大地提高了破解成本,易实现,对用户友好
- 缺:增加性能成本(hash计算)
- 在http头中自定义属性并验证
XSS(Cross-Site Scripting)
跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
分类
- 反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
-
存储型XSS:<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)
-
DOM型XSS:基于文档对象模型的一种漏洞。DOM中有很多对象,其中一些是用户可以操纵的,如uri ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。
防范手段
1.过滤特殊字符
2.转义
CSRF和XSS的区别
- CSRF:需要用户先登录网站A,获取 cookie。XSS:不需要登录
- CSRF:是利用网站A本身的漏洞,去请求网站A的api。XSS:是向网站 A 注入代码块,然后执行 代码块,篡改网站A的内容
参考网站: