【问题标题】:why is this xss not working为什么这个 xss 不起作用
【发布时间】:2017-04-24 11:52:17
【问题描述】:

我只是想在 xss 上锻炼,我希望在 echo 上弹出警报框,它应该在 echo 上工作。我正在根据概念进行练习,并且我对 htmlspecialchars 的使用有误,这很容易受到 xss 的影响。然而,这并没有真正起作用,我不明白为什么。这是我的代码

$name=htmlspecialchars($_GET['myname']);


echo "<HTML><body>";        
echo '<form action="">';
echo "name: <input type='text' name='myname' ><br>";

echo "<input type='submit' ></form>";

echo $name; // here I want the xss to execute a popup box

echo "</HTML></body>";

输入脚本如下所示。

<script>alert();</script>

我也尝试了很多替代方案。该脚本在我键入时显示,并且没有警告框。

【问题讨论】:

  • 你应该在html之前关闭body标签。还向您的表单添加方法
  • @Akin 在 HTML5 中不需要关闭某些标签,如果没有给出方法,则假定 GET。
  • 为什么这是htmlspecialchars()函数的错误用法?
  • 看看这个是否有帮助 owasp.org/index.php/… >

标签: javascript php security xss


【解决方案1】:

我正在根据概念进行练习,我对 htmlspecialchars 的使用有误,这很容易受到 xss 的攻击。

不过,你不知道。您已经完全按照应有的方式使用了htmlspecialchars,因此在这里可以防止 XSS。

【讨论】:

  • 不是真的。未设置 ENT_QUOTES。正确的方式应该是 htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
  • @zeroday ENT_QUOTES 在这里无关紧要(它只会影响 '" 的转义方式)。 &lt;&gt; 字符仍在被转义,从而完全阻止了 &lt;script&gt; 标记的工作。也无需指定 UTF-8,因为它是所有受支持的 PHP 版本中的默认值。
  • 这里是一些据称有效的注射security.stackexchange.com/questions/145716/… 和这个视频youtube.com/watch?v=EjiCSWKlsWI
  • @zeroday 它们之所以起作用,是因为易受攻击代码的特殊性。看看这些例子,看看ENT_QUOTES 做了什么。您应该很快就能理解为什么这些链接中的示例容易受到攻击,以及为什么您的代码没有。当单引号没有转义时,您的代码不会中断,因此它不容易受到攻击。指定ENT_QUOTES(或仅使用htmlentities)是最佳实践,因为有时您将使用'编写代码,这会变得容易受到攻击。
【解决方案2】:

我对 htmlspecialchars 的使用有误,易受 xss 攻击

对于您拥有的其余代码,您的使用没有错误,并且对于您拥有的代码,它不容易受到 XSS 的攻击。

仅使用一个参数使用htmlspecialchars 使用默认设置,这使得&lt;"&gt;&amp; 字符安全。

当内容被输出到可以放置文本节点的地方时,这绝对没问题。

无法保护您的 HTML 的主要情况是:

  • ' 代替" 分隔属性值
  • 将数据放入属性值中

这时你需要ENT_QUOTES 以便' 被转义到。否则你可能会得到:

$user_input = "' onmouseover='alert(1)'";
?>
<body data-userinput='<?php echo $user_input; ?>'>

...所以可以添加触发 JS 的新属性。

(请注意,如果您将数据插入 JS 或 URL,您还需要不同的清理技术)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-04-06
  • 2013-03-10
  • 1970-01-01
  • 2014-01-01
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多