为什么这个xss不起作用

时间:2017-04-24 11:52:18

标签: javascript php security xss

我只是想在xss上运动,我希望警报框弹出回声,这应该对回声起作用。我正在根据概念进行练习,而且我对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>

我也尝试了很多选择。脚本显示为我键入它并且没有警告框。

2 个答案:

答案 0 :(得分:3)

  

我正在根据概念进行练习,而且我对htmlspecialchars的使用有误,因为它很容易受到xss的攻击。<​​/ p>

但是,你没有。您已经完全按照它应该使用的htmlspecialchars使用了,因此在这里可以防止XSS。

答案 1 :(得分:2)

  

我错误地使用了htmlspecialchars,它容易受到xss

的攻击

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

仅使用一个参数htmlspecialchars使用默认设置,这样可以使<">&字符安全。

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

保护HTML的主要情况是:

  • 使用'而非"
  • 分隔属性值
  • 将数据放入属性值

当您需要ENT_QUOTES时,'会被转义。否则你最终会得到:

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

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

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