【问题标题】:PHP's mail(): What are potential issues to watch out for?PHP 的 mail():需要注意哪些潜在问题?
【发布时间】:2011-01-29 00:37:19
【问题描述】:

给定一个接受自定义用户输入(例如地址、主题行、消息)的联系表单,有哪些安全隐患和需要注意的“陷阱”?

至少,必须验证用户的电子邮件地址(可能使用 filter_var() 或等效方法)。根据我的阅读,这也应该防止额外的标头被注入到脚本中。

但是主题行和消息内容呢?这些领域是否需要任何卫生设施?我认为电子邮件客户端会阻止诸如脚本之类的东西自动运行,而且我并不特别担心 HTML 标签之类的东西(如果有人想花时间手动设置电子邮件样式,那是他们的特权 - 我只是不会看到它:P)。如果需要卫生,那么最好的方法是什么?不要太打扰(即保持电子邮件的性质相同)?

【问题讨论】:

  • @Rafe 我认为不是。 OP 正在专门询问卫生问题,而骗子没有解决这个问题
  • 该线程确实激起了我的兴趣。我以前从未发现需要使用 mail() 函数,并且有点怀疑事情会很快变得混乱。 :P

标签: php security


【解决方案1】:

如果您使用第四个参数,可选标题,请注意插入额外的标题,如果您正在执行类似的操作...

mail($to, $subject, $message, 'From: $email');

如果$email 来自用户输入且未经过清理,则用户可以输入类似...

\n\rCC:spammer@spamzilla.com

您可以通过过滤掉\n\r 或使用filter_var($email, FILTER_VALIDATE_EMAIL) 函数验证$email 来避免这种情况。

【讨论】:

  • 但是因为这样的陷阱很容易知道,所以让一个已经考虑过这些事情的图书馆来处理它会更安全。
【解决方案2】:

确保人们只能在正文中注入换行符。另外使收件人静态并且永远不要传递它,例如通过隐藏的表单域。但是,添加这样一个字段并不是一个坏主意;但如果 IP 未设置为预期值,则阻止 IP - 那么您的客户端可能是垃圾邮件机器人。

【讨论】:

  • 您确定在 to 和 subject 字段中的换行是不安全的吗?有参考吗?
  • 现在换行符转换为空格,但在 5.1.2 之前并非如此。无论如何,如果有人注入标头,他很可能是垃圾邮件发送者。您想检测到这一点,这样他甚至不会向合法的电子邮件收件人发送垃圾邮件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2010-10-24
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
相关资源
最近更新 更多