我在我的网站上有一个PHP驱动的HTML联系表单。目前我使用PHP mail()功能。因此,我必须做许多用户输入验证,以避免email header injection attacks。我认为我很安全,但我可能忘记了一些东西,我想转移到一个可靠的PHP电子邮件库。我选择的图书馆是Swiftmailer。使用Swiftmailer的PHP驱动的HTML联系表格有多安全?
现在我要检查,如果Swiftmailer解决以下问题:
- 除去或逃避发件人名称
<
和>
字符。 - 删除从发送者的名字换行符(
\n
,\r\n
...)。 - 从电子邮件主题中删除或转义换行符。
- 正常化换行符在消息主体(电子邮件的内容)。根据PHP文档,内容应使用
\n
,使用\r\n
作为电子邮件标题分隔符。
PS:我试图联系Swiftmailer团队与我的问题没有成功,所以我在这里尝试。
编辑:
我做了一些测试用例Swiftmailer,这是我迄今发现:
- 当你有一个
<
或>
在发送者的名字,你会得到a Undeliverable电子邮件错误邮件。这可能会导致邮件服务器的DOS attack(可能我错了)。这是正常的吗? - 换行符被转义,所以注入攻击失败。
- 换行符被转义,所以注入攻击失败。
- 测试,但我无法看到Swiftmailer做什么(如果它的东西)。所以我仍然在黑暗中。
有人能澄清#1和#4我吗?我不知道这是否是正常的行为......
您可以通过代码总是看...毕竟,Swiftmailer只是一个PHP脚本。如果你是这种关于漏洞的偏执狂,那么你可能想要审核任何外部库。 –
'保护头部注入攻击而不剥夺请求数据内容'(从主页),并通过代码粗略扫描我会假设,如果你传入任何无效的东西,你会得到一个异常,而不是无声的接受。 – hakre
看来只要你从任何用户提交的头文件和wordwrap($ message,70)中删除\ n和\ r,你应该没问题。从发件人名称中剥离< and >的交易是什么?我很想知道这些角色给你什么样的黑客攻击。任何信息非常感谢。 – dqhendricks