PHP邮件消毒


PHPMailer sanitization

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

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

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

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

数据净化有两个原因:SQL注入和XSS或CSRF(跨站点脚本或跨站点请求伪造)在任何一种情况下,用户都必须根据自己的输入将某些内容视为输出。

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

你需要消毒什么

  1. 附件类型!无论邮件客户端如何利用漏洞,都会在附件中找到。只允许以下mime类型:

    image/jpeg','image/pjpeg','images/gif','image_/png','application/msword','applications/vnd.ms-office','application/vnd.openxmlformats officedocument.wordprocessingml.docent','pplication/vnd.oopenxmlformats office document.wordprocessingml.template','approvnd.openxml formats officedocument.spreadsheetml.sheet','application/vnd.openxmlformats officedocument.presentationml.presentation','application/pdf'

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

  1. 附件的大小

确保你有尺寸限制。

漏洞可能存在于邮件中,也可能不存在于邮件客户端中,邮件客户端必须处理好它。然而,作为一名邮件端程序员,这是你应该处理的两件事。

希望能有所帮助:)

我个人不信任任何输入,所以我对所有内容都进行了消毒。例如,需要注意的一件事是,你可能使用的是html特殊字符,但如果有人使用非英语字符会发生什么?您需要使用UTF-8作为参数来定义字符集。

这个简单的遗漏(我决不认为你遗漏了它)可能会导致XSS攻击。

我投票支持HTMLPurifier。这是一个非常知名和安全的库,它将允许您对输入进行比htmlspecialchars更高程度的消毒。

/0.02

相关文章:
  • 没有找到相关文章