与IE不同的是,Chrome的XSSAuditor并没有使用正则的形式去判断。Chrome的XSS过滤是在词法解析阶段进行的,在解析网页时,HTML代码会被分解成不同的Token(每个Token即一个元素),XSSAuditor会逐一审查Token,将Token中存在的危险属性、字段和URL比较,若URL中也有同样内容,则XSSAuditor会认为这是一次反射型XSS攻击,随后会对该字段进行过滤处理。
Chrome XSSAuditor工作原理,以Chrome44为原型,例如当解析器解析下列代码时:<iframe src=”x” onerror=”alert(6)”></iframe>,会依次做如下判断:
1. 检查开始标签iframe,如果包含属性src、onerror,则认为可能危险,继续检查;
2. 如果src不是以javascript:开头,则安全,放行;
3. onerror中包含有脚本,检查这段代码是否同样出现在URL中;
4. 如果出现在URL中,认为这个地方有问题,这段代码会被过滤成<iframe src=”x” onerror=”void(0)”></iframe>;如果没有出现在URL中,认为这个地方没有问题,继续;
5. 检查中止标签iframe,没有问题,全流程结束。
8 脚本的编码
普通脚本安全问题大多数是在脚本权限内的滥用。以xss为例,网站、插件、浏览器没有统一的过滤标准,常见黑名单关键字过滤、字符替换虽然加大了攻击者的攻击难度,但是一些情况下仍然可能会被绕过。
当网站有针对特殊字符做过滤时(例如双引号),可以使用javascript脚本来构造合适的绕过代码。
Javascript中支持转义字符,如x、、u、U等。这四种编码方式是javascript字符串原生支持的编码方式。
x和两个编码方式有些像C语言的字符串转义符,x后可以跟一个十六进制的正整数,后可以跟一个八进制的正整数,x和跟的数字即为所代表的转义字符的ASCII码。数字大小范围为0x00~0xff。
而u或是U则应当跟一个范围在0x0000~0xffff之间的四位十六进制数字,不足的位用0补充。数字的含义是对应字符的Unicode数值编码。
除去这四个字符,还有一些特殊的转义符号,例如 代表换行, 代表一个缩进符号、代表斜线()等,这和C语言也是一样的。
当这些转义字符出现在字符串中时,脚本会自动将它们对应字符存储在字符串中,不需要做任何额外的操作。
8.1 浏览器的应对策略:CSP
浏览器只能起到缓解跨站脚本等问题,而不能杜绝它们。为了防患于未然,站长可以为自己的页面添加内容安全策略—CSP来限制加载资源的权限。W3C定义了内容的规范。
CSP支持策略列表如下:
CSP支持的策略及含义
指令
说明
default-src
默认策略,针对所有请求类型生效
script-src
脚本加载策略
img-src
图片加载策略
style-src
样式加载策略
connect-src
网络连接请求的加载策略,当拒绝时,浏览器会响应HTTP 400
media-src
多媒体加载策略,包括<>、<>等标签
frame-src
框架加载策略
sandbox
对所有请求的资源启用sandbox(有些类似于iframe的sandbox属性)
report-uri
请求资源被策略拒绝时上报日志信息的URI
每条指令均支持不同的策略值,这些值连在指令后面形成一条完整的策略,例如X-Content-Security-Policy:script-src’self’表明加载外部脚本时,只允许加载和自己同源的脚本,来自其他地方的脚本将全部拒绝。
9 页面显示时的安全问题
攻击者把低权限的内容,借由高权限的载体展示出来,利用一些欺骗性的内容对用户进行攻击,这称做责任混淆问题。
在浏览器中也是如此,低权限的内容是欺骗性的文字、图片,高权限的载体便是浏览器。此类骗局通常都需要攻击者使用诱惑、恐吓性质的内容先获取用户信息,然后引导用户去做一些他们平时并不会去做的行为(例如填写密码、银行转账、安装程序等)。
9.1 点击劫持
点击劫持(Clickjacking)是一种欺骗攻击手段,它通过在特制的页面中用欺骗性的内容覆盖在无害的页面上,并诱惑用户点击页面上的某个地方。当用户点击的时候,点击事件也会传给被覆盖的页面,这样可以让用户不知不觉地在覆盖的页面上做操作。
点击劫持可能有不同的目的,例如欺骗用户的“赞”。例如曾经有针对Facebook的攻击,攻击者用一个网页覆盖在Facebook之上,诱骗用户点击“赞”按钮所在的位置。另一种攻击则是利用Flash、HTML以及脚本的配合来劫持用户的光标,成为Cursorjacking。
9/13 首页 上一页 7 8 9 10 11 12 下一页 尾页