# Browser Security-css、javascript
### 层叠样式表(css)
* * *
调用方式有三种:
“`
1 用
Gotcha!'); }
“`
字符编码:
为了保证在css中可以使用可能产生问题的字符,css提供了一种方式由反斜杠()加六位十六进制数字。
字符e可以编码成\65 \065 \000065,当后面紧跟的字符也是十六进制字符中的一种的时候,只有最后一个才是对的。
例如teak编码成 t\65ak 不会正常,因为会解码时会把\65a当成一个字符。
为了避免上述情况可以编码以后加一个空白符,例如:t\65 k。
很多CSS解析器同样会解析引号之外的字符串。
下面两个代码IE下相同
“`
#### Fuzzing
CSS的解析规则与HTML和JavaScript在几个方面不同。
JavaScript在语法错误的时候,整个代码都会被忽略,而CSS解析错误时,浏览器尝试忽略错误的代码。
这点上跟HTML比较类似,因为HTML语法错误时,浏览器会尝试修复并展现出来,
@符号用来在CSS样式表中定义一个特殊属性,定义字符集(@charset)或者media的样式(@media)。
导入外部样式(@import)或外部字体(@font-face)或命名空间(@namespace)或定义一个演示文件(@page)。
定义字符集的时候,可以定义一个多字节字符集(如:SHIFT-JIS,BIG5,EUC-JP,EUC-KR或GB2312)可能会使反斜线失效:
“`
@charset “GB-2312″;
*{
content:”a%90\”; color:red; z:k”;
}
“`
会解析为:
“`
@charset “GB-2312″;
*{
content:”a撞”; color:red; z:k”;
}
“`
还有一种时UTF-7字符:
“`
@charset “UTF-7″;
*{
content:”a+ACIAOw- color:red; z:k”;
}
“`
会解析为:
“`
@charset “UTF-7″;
*{
content:”a”; color:red; z:k”;
}
“`
定义@charset在IE中并非这一种定义UTF-7的方式:
“`
+/v8-
*{
content:”a+ACIAOw- color:red; z:k”;
}
“`
在一些浏览器中导入的时候可以定义字符集:
“`
“`
CSS的选择器是非常有趣的部分,他可以包含字符串,表达式,函数。选择器也可以由多行组成:
CSS中的声明时一个 属性/值 对里面的规则集,通常形式如下:
“`
property: value;
“`
property是一个关键字,包括字母数字破折号,和大于0x7F的字符,也有绕过的方式:
“`
-moz-binding与\2d moz\2d binding相等。
“`
IE中property没有严格遵守这个规则,如果一个属性包含多个字,只有第一个字将被使用,其他的都会忽略:
“`
a b c: value;
a: value;
“`
上面两个规则是等效的。 并且IE中:可以替换为=
“`
a = value;
a: value;
“`
上面两个也是等效的。
同样重要的是IE允许多行的字符串,URL,选择器。
CSS最明显的局限性是,他本身不是一种编程语言,而是一种语言风格,他没有任何的编程逻辑。
他很难不借助于JavaScript进行攻击,下面主要讨论的是完全基于CSS不依赖于其他脚本语言的攻击。
整体的逻辑:
“`
element:condition{
action;
}
“`
element可以为任意值,condition为CSS选择器,如:visited,:active,:hover,:selected。 事件选择器:
“`
1 :hover 悬停鼠标在一个元素。
2 :active 点击一个元素。
3 :focus 光标放在一个元素上。
“`
CSS造成点击劫持:
“`
“`
点击劫持的防御方法一是添加X-FRAME-OPTIONS:NEVER头,另外一种方式是利用JavaScript:
“`
“`
两种方式都有局限性,之前发过点击劫持的文档了,详见:[http://drops.wooyun.org/tips/104](http://drops.wooyun.org/tips/104)
如下代码是一个有效的CSS2的代码,并且在Firefox,Safari,Chrome,Opera,IE7,IE8,IE9中没有影响,但是在IE6中,可执行代码:
“`
“`
以下代码中的color可以编码为c\olor,\c\o\l\or,c\6f l\06f r 。
“`
*{
color: red;
}
“`
### 浏览器脚本语言
* * *
解析javascript的时候以下两段代码不相同:
| 代码一 | 代码二 |
| — | — |
| <script> var my_variable1 = 1; var my_variable2 = </script> <script> 2; </script> | <script> var my_variable1 = 1; var my_variable2 = 2; </script> |
这是因为`
```
出于历史原因,某些HTML元素`(,
请登录后查看评论内容