【发布时间】:2013-01-10 14:54:24
【问题描述】:
我有一个带有文本框的表单,它可以将数据发布到一个使用“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" />
但是黑客的文本不是这样编码的。
所以我的问题是:
- 黑客如何输入 html 标签以使 htmlentities() 函数对它没有任何作用?
- 如何复制它进行测试? (可以通过上面的问题来回答)
我做了一些研究,黑客有可能将他的文本编码为 utf-7 或其他什么?
我已经收到了几封包含这些相同链接的电子邮件。这个黑客显然是在测试我的网站,看看他能不能做 XSS 什么的。
【问题讨论】:
-
在提交时使用 $_POST["usertext"] 字段的内容记录原始请求。您还可以将编码添加到应该与内容编码匹配的 htmlentities。
-
您是否在某处检查了包含的 JavaScript,也许它是动态创建的?
-
在发送之前您是否正确编码了您的 html 内容?
-
担心表单发送数据的方式的问题我认为是无关紧要的,因为黑客可以只使用程序来发布数据(例如 libcurl)。所以我只想弄清楚为什么php代码不起作用。
标签: php security forms http-post