1右击看一眼页面源码

有链接,大概率是用js绕过,输入javascript:alert(1)

坏消息是连接处显示链接不合法和过滤JavaScript

试了很多方法,看源码发现是有有个strpos()函数,要求必须匹配到http函数。

输入http://javascript:alert(1)看看页面源码

可见就是少了http://而已

输入unicode编码后的javascript:alert(1)

//http://把http://注释掉

javascript:alert(1)//http://

源码分析

<?php
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?phpif(false===strpos($str7,'http://'))
{
echo '<center><br><a >友情链接</a></center>';
}
else
{
echo '<center><br data-tomark-pass><a >友情链接</a></center>';
}
?>
  • 这部分代码拿到用户输入 $str(全部小写)。

  • 依次用 str_replace 替换了一些危险关键字(script、on、src、data、href、"),试图防止XSS。

  • 最后用 htmlspecialchars($str) 转义用户输入放入了 <input value="">,相对安全。

更多推荐