【问题标题】:Can you use PHP Explode() to help defend against injection attacks?你可以使用 PHP Explode() 来帮助防御注入攻击吗?
【发布时间】:2013-07-04 08:31:49
【问题描述】:

我一直在浏览一些帖子,以了解防止各种形式的“注入”攻击的方法。

What's the best method for sanitizing user input with PHP? 是一个很棒的帖子,对数据库非常有帮助,但是我想做的一件事是防止我的邮件服务器被某人“注册”并使用逗号分隔的电子邮件收件人字符串发送垃圾邮件人们。这是一个似乎不常被提及的话题。

是的,验证码(或等效)已经到位,这更适合那些将一长串逗号分隔值剪切并粘贴到电子邮件字段中的讨厌用户。

我希望爆炸然后只取数组中的零元素是抛弃其余元素的最佳方法,但是如果有人有其他想法或方法,那么很高兴阅读它们。

$emails_passed = explode(",", $_POST['email_field']); // could also use $_GET
$email_to = $emails_passed[0];

【问题讨论】:

  • html5 包含一个字段电子邮件,它也会为您处理它。 w3schools.com/html/html5_form_input_types.asp
  • 谢谢@DevZer0 我不清楚 - 对此感到抱歉。我喜欢 HTML5 选项,并且一直在对我的页面进行 HTML5 处理,但遗憾的是,并不是每个浏览器(还)都能很好地处理它——不过我等不及了。

标签: php forms security code-injection spam


【解决方案1】:

是的,你可以,但这样做并不明智。简单检查是否给出了有效的电子邮件,请参阅php validation, first example 了解一些基本的电子邮件验证。有效的电子邮件不包含逗号。

所以如果它有一个逗号它是无效的,所以你应该告诉用户,请给一个有效的电子邮件。认为这样解决问题的方式比使用explode更好

仅当您允许单个电子邮件 (foo@bar.com) 像 cmets the specs 中指出的 Gumbo 允许在电子邮件中使用逗号时,上述故事才有效。

因为您的问题是要阻止人们发送多封电子邮件,所以您“向他们发送垃圾邮件”。我仍然建议验证电子邮件并检查。

希望得到更多信息,感谢 Gumbo 的帮助

【讨论】:

  • 清理是修复无效用户输入的行为。只有在无法询问用户时才会发生这种情况。如果用户因为刚刚提交表单并正在等待接受确认而被询问,请向他提出错误列表并且不要接受表单。
  • -1 你错了:"foo,bar"@example.com 是一个有效的电子邮件地址。
  • 据我了解,这不是一封有效的电子邮件,而是电子邮件的组合(foo@example.com 和 bar@example.com)。同样在问题的情况下,爆炸也不起作用。
  • @Hendriq 其实是有效的:如果你看address specification in RFC 5322addr-spec中的local-part可以是@987654324 @。然而,这些地址很少被允许用于现实世界的地址。
  • @gumbo,不知道该信息并更改了文本。所以你看我们每天都会有新的东西