本文地址:http://www.jianshu.com/p/ebb1db302ef5
第九章 Web蠕虫
主要分三类:XSS蠕虫、CSRF蠕虫、Clickjacking蠕虫,还有第四类 文本蠕虫
Web 蠕虫思想
- 用户参与后被动或主动的传播威胁
XSS 蠕虫
- 性质:传播性和病毒性
- 具备以下条件
- 内容有用户驱动
- 存在XSS漏洞
- 被感染用户是登陆状态
- XSS蠕虫利用的关键功能本身具有内容的传播性
CSRF 蠕虫
与XSS蠕虫基本类似,只不过用的是CSRF,攻击代码放在攻击者页面中,目标网站都包含攻击者的URL
- 使用服务器端进行跨域优点是:蠕虫代码、逻辑可以很好的隐藏,缺点是在服务器端发起的GET和POST请求无法带上攻击站点的本地Cookie或内存Cookie。CSRF蠕虫只能通过Referer里的唯一值来进行下一步攻击
ClickJacking 蠕虫 ,界面劫持
发动ClickJacking蠕虫攻击,必须满足以下两个条件
- 在SNS社区中,找到一个可以直接发动HTTP的GET方式提交数据的页面
- 这个页面可以被
iframe
标签包含
第十章 关于防御
三个方面防御
- 浏览器厂商的防御,围绕Web厂商能参与的策略进行
- Web厂商的防御
- 用户的防御
浏览器厂商的防御
HTTP响应的X-头部
- X-Frame-Options
用于防御ClickJacking,有两个值:
-
DENY(禁止被加载任何frame);
-
SAMEORIGIN(仅允许被加载进同域内的frame)
-
X-XSS-Protection
有三个值:
-
0(表示禁用这个策略);
-
1(默认,对危险脚本做一些标记和修改,以阻止在浏览器上的熏染执行);
-
1;mode=block(强制不熏染,在Chrome下直接跳转到空白页,IE下返回一个#符号)
-
X-Content-Security-Policy(即CSP策略,将成为主流)
比如现在的问题,IE下CSS的expression可以执行js,html中的script标签,标签中on事件、标签style属性、标签src/href/action等属性都可以执行js,没有分离,导致很多安全问题,CSP就是解决这些问题
Chrome支持CSP策略的头部是X-WebKit-CSP
,而非标准的X-Content-Security-Policy
,不过具体策略都一样
CSP语法格式如下:
X-Content-Security-Policy:[指令1] [指令值1] [指令值2];[指令2] [指令值1] [指令值2];....
具体指令参考书本 P339,
主要有指令有:default-src
、script-src
、object-src
、img-src
、media-src
、frame-src
、font-src
、connect-src
、style-src
、report-uri
指令值有:
(1)、*
表示允许所有的来源
(2)、*.foo.com
表示来源foo.com的所有子域内容
(3)、https://foo.com
表示来源https协议下的foo.com
以下特殊指令值,单引号必须有
(1)、'none'
表示空集,即外部资源不被加载
(2)、'self'
表示仅同域内的资源可加载
(3)、'unsafe-inline'
表示允许内嵌JS/CSS
,如<script>
内的、javascript:
内的、on
事件内的、<style>
内的等,默认不被允许
(4)、'unsafe-eval'
表示允许eval
、setTimeout
、setInterval
、Function
等可以直接执行字符串的函数
(5)、data
指令,允许data:
协议
示例一:不允许任何外部资源加载,仅允许内嵌脚本执行
// 响应头如下
X-Content-Security-Policy: default-src 'unsafe-inline' 'self'
示例二:仅允许白名单外部资源加载,不允许内部脚本执行
// 响应头如下
X-Content-Security-Policy: default-src *.foo.com
Web厂商的防御
域分离
将业务放在不同的域下,子域不要设置document.domain
相同根域
安全传输,通过HTTPS
安全的Cookie,身份认证相关的cookie严格设置https,并且为HttpOnly
标记
优秀的验证码
慎防第三方内容
XSS防御方案
以下地方需要注意,具体参考书本P345
- 进入HTML标签之间时
- 进入HTML普通属性值时
- 进入JAVASCRIPT中时
- 进入CSS时
- 进入URL时
CSRF防御方案
- 检查HTTP Referer字段是否为同域
- 限制Session Cookie生命周期
- 使用验证码
- 使用一次性token
界面操作劫持防御
- X-Frame-Options防御,通过http响应头来控制,更安全
- Frame-Busting脚本防御
即通过js的方式防止页面被iframe嵌入
方法一(比较容易攻破):
if(top.location!=self.location){
top.location = self.location;
}
方法二(更安全):
<style>
html{display:none;}
</style>
<script>
if(self==top){
document.documentElement.style.display = 'block';
} else {
top.location = self.location;
}
</script>
- 使用token进行防御
用户的防御
附原书购买地址: http://item.jd.com/11181832.html
网友评论