【问题标题】:Filtering of user input before sending per email在发送每封电子邮件之前过滤用户输入
【发布时间】:2012-02-10 11:04:06
【问题描述】:

我正在用 PHP 创建一个简单的反馈表单:用户只需输入一些关于我的站点的 cmets/建议等,然后单击“发送反馈”。然后他输入的文本作为邮件正文直接发送给我(即我自己设置收件人地址,用户输入仅在邮件正文中使用)。

现在我不确定,如果我只是将未过滤的文本插入电子邮件正文,可能会发生什么样的攻击。

我目前正在使用 Joomla 平台(即我正在使用 Joomla 的 JMail 功能),但我认为问题更笼统:有很多关于 SQL 注入和跨站点脚本的信息(其中是等效的攻击向量),但我没有找到太多关于电子邮件的信息。

请注意,在我的例子中,文本每封电子邮件发送,所以我不关心 SQL 注入或跨站点脚本(电子邮件以纯文本形式发送)。那么我应该应用什么样的过滤呢?

谢谢 马丁

【问题讨论】:

  • 这取决于:您发送纯文本电子邮件还是 html 电子邮件?

标签: php security email sanitization


【解决方案1】:

由于您只期望 cmets 和建议,您可以简单地删除除字母、数字和“.”、“,”以外的任何字符。即使它删除了其他对您来说无关紧要的字符,您也会知道它们的含义。 “=”是最大的敌人。但我描述的那一套应该能保证你的安全。

【讨论】:

  • 我看错了,因为它的电子邮件正文与= 没有任何关系。但是没有人能伤害任何人身上只有字母和数字。
【解决方案2】:

最重要的是垃圾邮件保护。

如果您以 HTML 格式发送电子邮件,您应该过滤标签(strip_tags 或 htmlspecialchars)或验证用户的 HTML(HTMLPurifier http://htmlpurifier.org/

限制消息的长度也很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多