2013-07-12 58 views
1

我正在开发一个应用程序,我正在阅读实施安全措施。我设置了一个类来自动生成表单元素,并且该类将php字符串变量嵌入到html中以创建字段。然而,我注意到,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; 
+0

你如何测试确保你正在查看源代码,而不是查看开发工具或萤火虫。 – Orangepill

+0

我正在使用萤火虫,但其他回声陈述显示为他们的HTML形式,这一个行为就像我用htmlspecialchars() –

+0

使用浏览器查看源... DOM观众显示它是如何解释,并不总是如何返回。 – Orangepill

回答

2

尝试此操作:

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

应该打破你的HTML,因为你的属性值的分隔符是单引号,而现在它们出现在你的属性文字也是如此。

请确保不要使用任何复杂的DOM检查器,如萤火虫,但要查看由您的服务器发出的纯粹的源代码。

+0

您的操作工作。 Htmlspecialchars()修复了操作。谢谢! –

3

,只要你采取一些文本,并将其插入到一些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'"; 

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

+0

我添加了希望有帮助的细节。 –

相关问题