我一直在指某个网站,关于如何使用htmlspecialchars来防止恶意代码注入,但我现在比以前更加困惑。假设黑客将以下内容输入文本框:
<a href="http://nastywebsite.com">Nasty Website</a>
(如果上述实体被解码,他们将阅读:令人讨厌的网站)
我们假设黑客已将上述代码插入在线调查的FIRST_NAME文本框中,因此恶意代码将与&#39; first_name&#39;相关联。属性。让我们说这个在线调查的所有者希望通过以下代码来防止HTML注入:
<?php
$first_name = $_POST['first_name'];
$first_name = htmlspecialchars( $first_name );
echo $first_name;
?>
这是我感到困惑的地方。将被回应的超链接(据我所知)是#34; Nasty Website&#34;。这意味着无辜的用户仍然可以点击该超链接,他将毫无疑问地将恶意软件下载到他的设备上。那么htmlspecialchars函数有什么意义呢?当然,如果字符串被htmlspecialchars函数过滤,如上面的代码所示,用户就会看到无害的文本:
<a href="http://nastywebsite.com">Nasty Website</a>
而不是超链接。如果用户DID看到实体而不是超链接,他将无法下载恶意代码。我不明白。用户是否看到了ENTITY或HYPERLINK?
答案 0 :(得分:2)
如果您没有转义字符串,用户将会看到:
如果你逃脱,他会看到这一点:
<a href="http://nastywebsite.com">Nasty Website</a>
Html渲染器将实体解码为字符,并且不将它们解释为有效标记。
如果您不想在输入中允许html标记,可以使用strip_tags。