XSS进攻一些常用防范方法
XSS攻击一些常用防范方法上述代码执行后,同样可以实现跨站的目的。而且很多的HTML标记里属性都支持“javascr
XSS攻击一些常用防范方法
上述代码执行后,同样可以实现跨站的目的。而且很多的HTML标记里属性都支持“javascript:跨站代码”的形式,因此就需要对攻击者输入的数据进行如下转换:
replace(str, "javascript:", "")
replace(str, "jscript:", "")
replace(str, "vbscript:", "")
一旦用户输入的语句中含有”javascript”,”jscript”,”vbscript”,都用空白代替。- 即可突破过滤程序,继续进行跨站攻击,使用代码:
replace(str, "&", "&")
上述代码将”&”替换为了”&”,于是后面的语句就变形失效了。但是还有其他的方式绕过过滤,因为过滤关键字的方式具有很多的漏洞。攻击者可以构造下面的攻击代码:
<img src="javas cript:alert(/XSS攻击/)" width=100>
这里关键字被空格,准确的说是Tab键进行了拆分,上面的代码就又失效了,这样就有考虑将Tab空格过滤,防止此类的跨站攻击。 - 这是一个利用onerror事件的典型跨站攻击示例,于是许多程序设计者对此事件进行了过滤,一旦发现关键字”onerror”,就进行转换过滤。
然而攻击者可以利用的时间跨站方法,并不只有onerror一种,各种各样的属性都可以进行构造跨站攻击。例如:
<img src="#" style="Xss:expression(alert(/跨站/));">
这样的事件属性,同样是可以实现跨站攻击的。可以注意到,在“src=”#””和“style”之间有一个空格,也就是说属性之间需要空格分隔,于是程序设计者可能对空格进行过滤,以防范此类的攻击。但是过滤了空格之后,同样可以被攻击者突破。
<img src="#"/**/onerror=alert(/跨站/) width=100>
这段代码利用了脚本语言的规则漏洞,在脚本语言中的注释会被当成一个空白来表示。所以注释代码就简介的达到了空格的效果,使语句得以执行。