查看源码看看过滤了什么

<>被过滤了

网站使用了 htmlspecialchars() 函数,这会将以下字符转义成实体:

字符被转义为
<&lt;
>&gt;
"&quot;
'&#039; 或 &#x27;
&&amp;

这意味着基本的 HTML 标签注入(如 <script>)会直接失效。

通过下面文章可以得知

xss防护绕过方法-CSDN博客

我们有很多payload可以使用,网上大多用onmouseover,这里用onfocus演示一下

输入:

'autofocus οnfοcus=alert(1)  x='

再点击一下搜索框出发一下onfocus事件即可成功

源码分析

<?php
ini_set("display_errors", 0);         // 关闭错误提示
$str = $_GET["keyword"];              // 获取用户输入
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"
   . "<center>
      <form action=level3.php method=GET>
      <input name=keyword value='".htmlspecialchars($str)."'>
      <input type=submit name=submit value=搜索 />
      </form>
      </center>";
?>
<center><img src=level3.png></center>

代码逐段讲解:

ini_set("display_errors", 0);
  • 禁止 PHP 报错信息显示,防止泄露敏感信息。


$str = $_GET["keyword"];
  • 获取 URL 参数中的 keyword 值。
    例如:level3.php?keyword=hello → $str = "hello"


htmlspecialchars($str)
  • ⭐⭐ 重点:对用户输入进行 HTML 实体转义,防止脚本执行。

  • 会把这些字符转为安全的形式:

    原始转义后
    <&lt;
    >&gt;
    "&quot;
    '&#039;

  • 在两处使用:

    • 显示在 <h2> 文本中

    • 插入到 <input value=''> 属性中


但是这关没对'转义,所以我们用'闭合即可

更多推荐