script应该被过滤了

测试后发现on也被过滤

我们用url伪协议

"><a href=javascript:alert(1)>点击</a><"

点击即可

源码分析

一、整段代码解析

ini_set("display_errors", 0); 
  • 禁止错误信息显示。


$str = strtolower($_GET["keyword"]); 
  • 获取 URL 参数 keyword,并统一转成小写(防止用大写绕过过滤)。


$str2 = str_replace("<script", "<scr_ipt", $str); 
  • 把小写 <script 替换成 <scr_ipt,试图阻止最常见的 <script> 标签注入。


$str3 = str_replace("on", "o_n", $str2); 
  • 把所有 on(如 onerror, onfocus, onclick)替换成 o_n,试图阻止事件属性注入。


echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>" . '<center> <form action=level5.php method=GET> <input name=keyword value="'.$str3.'"> <input type=submit name=submit value=搜索 /> </form> </center>'; 
  • <h2> 是安全的,用了 htmlspecialchars()。

  • 关键是 <input value="..."> 部分输出了你处理后的输入,没有转义引号 

  • 你仍然可以通过 HTML 属性注入的方式触发 XSS 


二、他们的防护做了什么?

过滤点说明
<script → <scr_ipt禁止 script 标签
on → o_n禁止事件属性(onxxx)
strtolower()防止大小写绕过
没转义引号依然危险!

 


Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐