在这种情况下不需要Htmlspecialchars?

时间:2013-07-12 05:57:34

标签: php security

我正在开发一个应用程序,我正在阅读实施安全措施。我设置了一个类来自动生成表单元素,并且该类在html中嵌入了php字符串变量来创建字段。然而,我注意到,当我去实现它时,htmlspecialchars()不是必需的。所以我试图伪恶意地转变这个:

<input type="text" name="email">... rest of html

成:

<input type="text" name="email"><br><br>

但是,在使用htmlspecialchars()之前和之后,当我尝试编辑前端html时,我的浏览器会给我这个:

<input type="text&quot; name=&quot;email&quot;&gt;&lt;br&gt;&lt;br&gt;

这只是自动实现的东西吗?如果是这样,这是来自PHP更新(我以为我发现它是PHP 5.4中的更新)?

此外,我可以放弃使用htmlspecialchars()吗?

谢谢!

编辑:请求更多信息

$this->type = 'text' //what I would normally use
$this->type = 'text" name="name"><br><br>' //my attempt to manipulate the html
$output = "<input type='$this->type' name='$this->name'";
$output .= ... close the tag, etc.
echo $output;

2 个答案:

答案 0 :(得分:4)

每当你拿一些文本并将其作为字符串插入某些HTML时,都需要使用htmlspecialchars(除非你知道文本不包含HTML中具有特殊含义的任何字符,但即使这样使用htmlspecialchars是一个很好的习惯。

我无法解释为什么你的未指定的输入,当你通过你的未指定的代码运行然后通过浏览器的解析器运行(具有错误恢复功能)时,会给你输出


问题更新后:

$this->type = 'text" name="name"><br><br>' //my attempt to manipulate the html
$output = "<input type='$this->type' name='$this->name'";

您的属性值以'个字符分隔。您的数据不包含任何'个字符,因此它不会终止属性值并转义。

答案 1 :(得分:2)

尝试这种操作:

$this->type = 'text\' name="name"><br><br>' //my attempt to manipulate the html

它应该会破坏您的HTML,因为属性值的分隔符是单引号,现在它们也出现在您的属性文本中。

请确保不要使用任何复杂的DOM检查器(如firebug),但要查看服务器发出的纯源代码。