使用htmlspecialchars防止恶意HTML注入

时间:2014-12-26 13:21:56

标签: php html security hyperlink code-injection

我一直在指某个网站,关于如何使用htmlspecialchars来防止恶意代码注入,但我现在比以前更加困惑。假设黑客将以下内容输入文本框:

<a href="http://nastywebsite.com">Nasty Website</a>

(如果上述实体被解码,他们将阅读:令人讨厌的网站)

我们假设黑客已将上述代码插入在线调查的FIRST_NAME文本框中,因此恶意代码将与' first_name'相关联。属性。让我们说这个在线调查的所有者​​希望通过以下代码来防止HTML注入:

<?php
  $first_name = $_POST['first_name'];
  $first_name = htmlspecialchars( $first_name );
  echo $first_name;
?>

这是我感到困惑的地方。将被回应的超链接(据我所知)是#34; Nasty Website&#34;。这意味着无辜的用户仍然可以点击该超链接,他将毫无疑问地将恶意软件下载到他的设备上。那么htmlspecialchars函数有什么意义呢?当然,如果字符串被htmlspecialchars函数过滤,如上面的代码所示,用户就会看到无害的文本:

           &lt;a href=&quot;http://nastywebsite.com&quot;&gt;Nasty Website&lt;/a&gt;

而不是超链接。如果用户DID看到实体而不是超链接,他将无法下载恶意代码。我不明白。用户是否看到了ENTITY或HYPERLINK?

1 个答案:

答案 0 :(得分:2)

如果您没有转义字符串,用户将会看到:

Nasty Website

如果你逃脱,他会看到这一点:

<a href="http://nastywebsite.com">Nasty Website</a>

Html渲染器将实体解码为字符,并且不将它们解释为有效标记。

如果您不想在输入中允许html标记,可以使用strip_tags