13

我有一个带有文本框的表单,它将数据发布到一个使用“htmlentities”函数的php文件中,以确保向网站所有者发送电子邮件是安全的。

问题是有人设法在文本中获得了超链接,而 htmlentities() 没有删除它。

这是我的文本框 html:

<input name="usertext" type="text" />

这是我接收帖子数据的 PHP 代码(我将电子邮件代码省略了,因为这不是问题。我将其更改为仅回显接收到的数据,以便我可以尝试复制黑客所做的事情。如果我知道他是如何做到的,我可以找到一种方法来阻止它发生):

echo trim(htmlentities($_POST["usertext"], ENT_QUOTES));

现在黑客发送了一些数据,这是结果 html(源代码 - 这意味着它在浏览器中显示了一个正常的链接):

<a target="_blank" href="mailto:nyjfvw@fbjgzy.com">nyjfvw@fbjgzy.com</a>

我认为 htmlentities() 总是会阻止任何人输入任何类型的 html。如果我输入一个超链接,例如:

<a href="aaa" />

我得到:

&lt;a href="aaa" /&gt;

但黑客的文本不是这样编码的。

所以我的问题是:

  1. 黑客是如何输入 html 标签以使 htmlentities() 函数对其没有任何作用的?
  2. 我将如何复制它进行测试?(可以通过上面的问题来回答)

我做了一些研究,黑客可能将他的文本编码为 utf-7 或其他什么?

我已经收到了几封带有这些相同链接的电子邮件。这个黑客显然是在测试我的网站,看看他能不能做 XSS 什么的。

4

4 回答 4

7

好问题!我认为您可以阅读此链接来解释问题并提供解决方案。

建议的解决方案是向浏览器指定(通过元标记)在页面中使用哪个字符集。

于 2013-01-10T15:48:26.340 回答
1

我认为strip_tags完全符合您的需求: http: //php.net/manual/en/function.strip-tags.php

于 2013-01-10T16:13:46.750 回答
0

这不是最优雅的解决方案,但是在没有看到其余代码的情况下,您可以检查 usertext 字段是否包含字符串“href”并拒绝它。

于 2013-01-10T15:01:02.863 回答
0

htmlspecialchars() 会成功吗?W3Schools 上的这篇文章似乎暗示了这一点。

于 2017-08-08T12:11:51.790 回答