【问题标题】:HTML5 Form and PHP mail() InjectionHTML5 表单和 PHP mail() 注入
【发布时间】:2015-06-07 19:06:11
【问题描述】:

我有一个带有简单表单的 HTML 页面。 该表单具有一个必需的电子邮件输入类型和一个提交按钮。 我只需要将电子邮件发送到某个地方。就像一个订阅按钮。

我正在使用 PHP mail() 函数将电子邮件发送到我的个人电子邮件地址。

mail($to, $subject, $message, $additional_headers);

你认为我在这种情况下会有什么问题吗?我应该改用 PHP Mailer 吗?

我阅读了有关电子邮件注入的信息,但在测试表单时,我没有发现任何问题。我认为 HTML5 的电子邮件类型不允许您插入任何其他字符来向该字段发送垃圾邮件。

我将使用 CAPTCHA,这样我就不会收到机器人的垃圾邮件。 不会再用了

很抱歉发布这个,关于电子邮件注入的(旧)主题太多了,但没有一个与 HTML5 相关的主题。如果我是对的,我真的不需要测试电子邮件注入。我正在寻找一个非常简单和简短的代码。

编辑:

所以我得到了太多帮助,我真的很困惑。 我只有一个带有电子邮件输入字段的简单 HTML 页面。我希望将该电子邮件发送到我的电子邮件。

所以我不需要使用htmlspecialchars(),因为我只使用$message$headers 的用户输入。我将使用preg_match( "/[\r\n]/", $_POST['email']) 来检查是否将额外字段(例如CC 和BCC)注入到标头中。

在我的情况下,鉴于我只使用 mail() 函数,我可以得到 CSRF 攻击或我应该关注的任何其他攻击吗?

【问题讨论】:

  • 你已经错了,你认为到达服务器端脚本的任何请求都必须来自你的表单——当然它不是。它甚至不必来自任何你称之为“浏览器”的东西——能够发出 HTTP 请求的任何东西都可以用它喜欢的任何数据轰炸你的脚本.因此,服务器端脚本中的参数验证始终是绝对必要的。
  • @CBroe 是正确的——你需要清理你的输入。像在传递 mail() 参数之前运行 htmlspecialchars() 这样简单的事情是一个很好的开始。
  • 这是我的建议,除了 CBroe 和 kittykittybangbang Htmlsepcialchars 清理你的输入并帮助防止 XSS 注入攻击,我建议你也制作一个令牌来防止 CSRF 攻击。总而言之,请尝试阅读此指南owasp.org/index.php/…,关于您的电子邮件服务,请尝试使用 Mandrill 或 Mailgun.org 的 API。根据它的安全程度,您还可以咨询网络安全专家。
  • 谢谢:@CBroe、kittykittybangbang 和 maytham。我将尝试遵循您的提示。我认为如果该字段不允许输入除电子邮件以外的其他内容,那么它已经是安全的。我会消毒它以确保。我将其用作反垃圾邮件机器人link 的指南,但是人类垃圾邮件(例如发送和刷新页面或只是返回并再次发送)呢?我可以在不使用验证码的情况下使其安全吗?没有它看起来更好..
  • mail函数参数中如何使用用户提供的数据?

标签: php html email csrf code-injection


【解决方案1】:

为确保您收到安全的消息,您必须应用一些过滤器:

<?php
$message = strip_tags( $message ); 
$subject = strip_tags( $subject );
mail($to, $subject, $message, $additional_headers);

【讨论】:

  • 这不会修复 all 的标头注入。 OP 需要向我们展示他实际上是如何使用代码的。另外,请改用htmlentities,因为这样不会删除字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多