我正在开发一个应用程序,我正在阅读实施安全措施。我设置了一个类来自动生成表单元素,并且该类在html中嵌入了php字符串变量来创建字段。然而,我注意到,当我去实现它时,htmlspecialchars()不是必需的。所以我试图伪恶意地转变这个:
<input type="text" name="email">... rest of html
成:
<input type="text" name="email"><br><br>
但是,在使用htmlspecialchars()之前和之后,当我尝试编辑前端html时,我的浏览器会给我这个:
<input type="text" name="email"><br><br>
这只是自动实现的东西吗?如果是这样,这是来自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;
答案 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),但要查看服务器发出的纯源代码。