4

问题很简单:在使用 PHPmailer 类时我应该使用任何类型的清理吗?

我制作了使用 phpmailer 类发送电子邮件的简单发送邮件表单。目前我只使用“htmlspecialchars”进行消毒(虽然我读到没有必要这样做,但这个信息不是 100% 可靠的)。

我试图在标签之间发送一些 js 代码,并且我收到了它的清理,但我不确定是否可以进行其他类型的攻击。

4

2 回答 2

6

在发送到 phpMailer 之前,您不需要对任何内容进行清理,除非检查输入的电子邮件地址是否是有效的电子邮件地址。

数据清理有两个原因:SQL 注入和 XSS 或 CSRF(Xross 站点脚本或跨站点请求伪造) 在任何一种情况下,用户都必须根据他们的输入看到一些输出。

但是,您询问邮件类的消毒是一件好事,因为理想情况下没有人会要求它。HTML标签?当然你可以发送 HTML 标签!您可以将内容类型定义为text/html

你需要消毒什么?

  1. 附件类型!无论邮件客户端漏洞如何,总是在附件中找到。仅允许以下 MIME 类型:

    image/jpeg'、'image/pjpeg'、'image/gif'、'image/png'、'application/msword'、'application/vnd.ms-office'、'application/vnd.openxmlformats-officedocument.wordprocessingml。文档'、'application/vnd.openxmlformats-officedocument.wordprocessingml.template'、'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'、'application/vnd.openxmlformats-officedocument.presentationml.presentation'、'application/pdf'

不建议检查文件的扩展名!因为,邮件客户端可能会使用 get_file_contents() 之类的函数,它只会在浏览器中打开文件,如果它是嵌入了 JPEG 扩展名的 javascript,它仍然会执行!(在 IE6/IE7 中确实如此)然而,这又是浏览器的工作,具有强大的解析机制。内容嗅探

  1. 附件尺寸

确保你有大小限制。

漏洞利用可能会或可能不会在邮件中,邮件客户端必须处理它。但是,作为邮件端编码器,这是您应该注意的两件事。

希望有帮助:)

于 2012-09-05T17:42:34.603 回答
2

我个人不相信任何输入,所以我会清理所有内容。例如要注意的一件事是,您可能正在使用 htmlspecialchars 但如果有人使用非英文字符会发生什么?您将需要使用 UTF-8 作为参数来定义字符集。

这个简单的遗漏(我绝不是说你确实遗漏了它)可能会导致 XSS 攻击。

我投票支持HTMLPurifier。这是一个非常知名且安全的库,它可以让您对输入进行比 htmlspecialchars 更高的程度的清理。

/0.02

于 2012-09-05T17:30:46.237 回答