我有一个带有文本框的表单,该文本框将数据发布到使用“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" />
我明白了:
<a href="aaa" />
但黑客的文字并没有这样编码。
所以我的问题是:
我做了一些研究,黑客可能会用utf-7或其他东西编写他的文本?
我已收到几封带有相同链接的电子邮件。这个黑客显然正在测试我的网站,看看他是否可以做XSS或其他什么。
答案 0 :(得分:5)
好问题!我想你可以阅读这个解释问题的link并给出一个解决方案。
建议的解决方案是在浏览器中(通过元标记)指定在页面中使用哪个字符集。
答案 1 :(得分:1)
我认为strip_tags
完全符合您的需求:http://php.net/manual/en/function.strip-tags.php
答案 2 :(得分:0)
这不是最优雅的解决方案,但是如果没有看到其余代码,您可以检查usertext字段是否包含字符串“href”并拒绝它。
答案 3 :(得分:0)
htmlspecialchars()会不会这样做? W3Schools上的article似乎表明了这一点。