是否需要转义PHP mail()函数的消息部分?

时间:2010-11-08 18:10:04

标签: php security

我正在创建反馈网页。我想用一个用户输入的文本区域并使用mail函数将其发送给自己。执行以下操作是否安全:

mail("me@blah.com", "Feedback!", $_POST['feedback'], "From: myself@blah.com");
/*    (to)           (subject)    (message)           (headers) */

或者我是否需要以某种方式逃避或消毒$_POST['feedback']

4 个答案:

答案 0 :(得分:2)

是的,你应该将其作为一般做法进行消毒,但这里没有太多可能出错的地方,只需确保在您指定的标题中:

Content-Type: text/plain

然后没有用户可以发送任何“恶意”给你点击,执行某种跟踪等等。(编辑:当然不知道它是什么;我的意思是,没有误导性的链接,1x1透明GIF等)

答案 1 :(得分:1)

正如stilstanding所说 - 你仍然需要清理任何用户提供的数据。

我还建议使用像PHPMailer这样的脚本来创建和发送电子邮件。这将安排格式化邮件,并使发送多部分HTML /文本消息等任务变得更加容易:

http://sourceforge.net/projects/phpmailer/

答案 2 :(得分:0)

取决于谁收到邮件。例如。如果它是GMail,他们有自己的公平武器逃避任何东西,任何人都会很难注入任何东西。但是,如果有人要查看来自某些网络邮件的邮件,并且该网页邮件是过时的版本,那么意图不好的人可能会做坏事。

如果您不打算检查<script>标签等,则必须不进行转义。但是你最好用quoted-printable对你的电子邮件进行编码,以获得可传递性而不是安全性,这项任务最好由一个好的邮件类/函数Zend_Mail完成。并且您可以独立使用它(即没有其他库组件)。

答案 3 :(得分:0)

“消毒”是一种模糊的术语。出于不同目的,存在不同类型的编码。

如果您要发送纯文本邮件,我认为您不必担心编码。 PHP的邮件功能应该处理所需的任何编码。

如果您要发送HTML消息,那么无论值是否来自用户,您都需要对所有HTML属性和内容进行HTML编码。