我有一个带有文本框的表单,该表单将数据发布到使用功能“htmlentities”的php文件中,从而可以安全地通过电子邮件发送给网站所有者。
问题是有人设法在文本中获取超链接,而htmlentities()并未将其删除。
这是我的文本框html:
<input name="usertext" type="text" />
这是我的PHP代码,用于接收帖子数据(我将电子邮件代码省略了,因为那不是问题。我将其更改为仅回显接收到的数据,以便我可以尝试复制黑客的操作。如果我知道他的操作方式, ,我可以找到一种方法来阻止它的发生):
echo trim(htmlentities($_POST["usertext"], ENT_QUOTES));
现在,黑客发送了一些数据,这就是结果html(源代码-这意味着它在浏览器中显示了正常链接):
<a target="_blank" href="mailto:[email protected]">[email protected]</a>
我认为htmlentities()总是会阻止任何人输入任何形式的html。如果输入超链接,例如:
<a href="aaa" />
我得到:
<a href="aaa" />
但是,黑客的文字并不是这样编码的。
所以我的问题是:
我做了一些研究,黑客可能会用utf-7或其他某种方式对他的文本进行编码?
我已经收到一些带有这些链接的电子邮件。该黑客显然正在测试我的网站,以查看他是否可以执行XSS或其他操作。
最佳答案
好问题!我认为您可以阅读link来解释问题并提供解决方案。
提出的解决方案是(通过元标记)向浏览器指定页面中使用的字符集。