PHP htmlentities不足以阻止黑客从表单中注入html

Dan*_*iel 11 php forms security http-post

我有一个带有文本框的表单,该文本框将数据发布到使用"htmlentities"功能的php文件,以便通过电子邮件发送给网站所有者.

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

这是我的文本框html:

<input name="usertext" type="text" />
Run Code Online (Sandbox Code Playgroud)

这是接收后的数据(我离开了电子邮件的代码,因为这是没问题的.我改变它只是呼应了接收到的数据,所以我可以尝试复制黑客做了什么.如果我知道他是如何做到的我的PHP代码,我可以找到阻止它发生的方法):

echo trim(htmlentities($_POST["usertext"], ENT_QUOTES));
Run Code Online (Sandbox Code Playgroud)

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

<a target="_blank" href="mailto:nyjfvw@fbjgzy.com">nyjfvw@fbjgzy.com</a>
Run Code Online (Sandbox Code Playgroud)

我认为htmlentities()总能阻止任何人输入任何类型的HTML.如果我输入一个超链接,例如:

<a href="aaa" />
Run Code Online (Sandbox Code Playgroud)

我明白了:

&lt;a href="aaa" /&gt;
Run Code Online (Sandbox Code Playgroud)

但是黑客的文本并没有这样编码.

所以我的问题是:

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

我做了一些研究,黑客可能会用utf-7或其他东西编码他的文本?

我已收到几封带有相同链接的电子邮件.这个黑客显然正在测试我的网站,看看他是否可以做XSS或其他什么.

Ale*_*pac 5

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

提出的解决方案是(通过meta标签)向浏览器指定页面中使用的字符集。