简单的反射型XSS漏洞挖掘与防御

<?php

if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){

$isempty = true;

} else {

echo '< pre>';
echo 'Hello ' . $_GET['name'];
echo '</ pre>';

}

?>
我们看这段代码,没有经过任何过滤,本地测试,成功弹框4444.png

<?php

if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){

$isempty = true;

} else {

echo '< pre>';
echo 'Hello ' . str_replace('< script>', '', $_GET['name']);
echo '</ pre>';

}

?>
下面,来看这段代码,过滤了script,但xss不仅仅是过滤script那么简单的事,本地测试下555.png果然是不可以的,不用script,用img标签,成功弹框。防御的话,过滤script,alert,javascript,<,>,/,img等标签即可66666.png

标签: none

已有 2 条评论

  1. phy phy

    这个代码不知道是谁写的 :-)

    if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == '') // 太复杂 if(empty($_GET['name'])) // 完全替代 array_key_exists ("name", $_GET) // => isset($_GET['name'])

    至于说这个方面的 XSS 防御,最简单粗暴的方法是用 WordPress 的 esc_html,或者直接 htmlspecialchars($_GET['name'])。

    1. 引用的dvwa的代码

评论已关闭