Browser Security-超文本标记语言(HTML)

  • A+
所属分类:lcx

重要的4个规则:

1 &符号不应该出现在HTML的大部分节点中。

2 尖括号是不应该出现在标签内的,除非为引号引用。

3 在text节点里面,

4 引号在标签内可能有危害,具体危害取决于存在的位置,但是在text节点是没有危害的。

文件解析模式

在任何HTML文档中,最开始的用来指示浏览器需要解析的方式,同样也可使用Content-Type头来告诉浏览器。

一般情况下,浏览器中的解析器会尝试恢复大多数类型的语法错误,包括开始和结束标记。

在XML中,是非常严格的,所有标签必须有对应的开始关闭,也可以有自动关闭如也是允许的。

了解HTML解析

在IE浏览器中允许在1中插入NUL字符(0x00),可以绕过非常多的xss过滤器。

如下php代码可把NUL字符插入标签内做测试:

2和4中的空格也可以由tab(0x0B)与换页键(0x0C),2处也可以用/来代替。

5中的"在IE中也可替换成`。

IE当中还有一个特性是当遇到=后面紧跟一个引号的时候会有奇怪的解析。

Yes, we are still inside a tag!">

Entity编码

HTML解析器在建立文档树的时候会针对节点内的Entity编码解码后传输。

以下两个表示相同:

Browser Security-超文本标记语言(HTML)Browser Security-超文本标记语言(HTML)

下面两个例子代码不会执行,因为,编码的是标签本身的结构而非节点内的内容:

Fuzzing

对一个普通的HTML进行Fuzzing测试:

Click me

看一下可以Fuzzing的位置

位置 代码 可能插入或替代的代码

控制符,空白符,非打印字符
a标签的后门
同上
href属性中间
同上+空字节
=两边
所有字符
替换=
Union编码符号
替换" 其他引号
>之前 任意字符
/之前 ... 空白符,控制符
/之后 ...[here]a> 空白符,控制符
>闭合之前 [here]> 所有字符

可以使用php代码进行快速测试,例如我们对第一个位置(

'.$i.'

文章来源于lcx.cc:Browser Security-超文本标记语言(HTML)

相关推荐: Java弹出对话框 三种形式

function firm() { //利用对话框返回的值 (true 或者 false)   if(confirm("你确信要转去 天轰穿的博客?")) {location.href="http://thcjp.cnblogs.com"; } //如果是tr…

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: