查看原文
其他

PHP安全:邮件安全

文章来源:计算机与网络安全

邮件发送和短信发送在很多业务场景上是用户的首选。在使用邮件发送的过程中,业务上某些情况与短信一样,如注册验证、密码找回,建议添加图片验证码、IP、邮箱限制,除此之外还需要注意邮件注入问题的发生。


1、邮件注入


邮件注入是针对PHP内置邮件功能的一种攻击类型。攻击者通过注入任何邮件头字段如BCC、CC、主题等,利用系统邮件服务器发送垃圾邮件。这种攻击的主要原因是由于没有对用户的输入进行严格的过滤和审查,接收用户信息并发送电子邮件消息的应用程序。


在PHP中使用mail()函数进行邮件发送。如果对用户的输入没有进行检查通常会造成邮件注入,下面是mail()函数的说明。


bool mail ( string $to , string $subj ect , string $message [, mixed$additional_headers [, string $additional_parameters ]] )


下面是一段邮件发送的示例。


<?php

$email=$_POST['email'];

mail("someone@ptpress.com.cn","Subject: 报名邮件","有新用户报名请及时处理",“From: $email”);

echo "邮件发送成功";


此代码中允许用户对发件人、发件标题以及内容进行自定义,会将邮件统一发送到someone@ptpress.com.cn邮箱。


由于SMTP区分消息头部和消息主题是依据%0A%0A双换行符决定的,消息头里的属性是以%0A区分的,因此用户如果自行将%0A%0A或%0A写入到变量中,会直接控制消息体控制被发送对象及内容。


如果用户在email参数中输入:


From:s ende r@ptp re s s.com.cn%0AC c:othe r1@ptp re s s.com.cn%0AB cc:other2@ptpress.com.cn


在发送者字段email后注入Cc和Bcc参数,消息将被发送到other1@ptpress.com.cn和other2@ptpress.com.cn账户,但这并不是研发人员的本意。


除此之外,恶意攻击者还可以修改邮件标题,如email内容输入:


From:sender@ptpress.com.cn%0ASubj ect:这是一封广告邮件


攻击者将假的主题Subject添加到原来的主题中,并且在某些情况下将覆盖原本的主题Subject。


如果输入以下内容,假消息将被添加到原始消息中。


From:sender@ptpress.com.cn%0A%0A这是一封新的邮件


攻击者通过灵活运用%0A对邮件进行截断,从而诱导服务器给任意用户发送任意内容,给服务器和企业造成损失,所以在接收到用户的请求后要进行严格的过滤,防止用户恶意注入。


2、防止邮件注入


可以通过filter_var()函数检测防止邮件注入的发生。


<?php

$email=$_POST['email'];

$email=filter_var($email,FILTER_SANITIZE_EMAIL); // 过滤器从字符串中删除电子邮件中包含的非法字符

if(!filter_var($email,FILTER_VALIDATE_EMAIL)) {

// 验证变量中的值是否是邮件格式

die("邮件校验失败,请重新输入");

}

mail("someone@ptpress.com.cn","Subject: 报名邮件","有新用户报名请及时处理",“From: $email”);

echo "邮件发送成功";


除此之外,在允许用户自定义邮件标题和内容的情况下,建议对标题和内容进行过滤。






推荐阅读




*Apache Struts爆最新漏洞

*Node.js 目录穿越漏洞(CVE-2017-14849)

*十大Docker开源替代产品

                                                                                         

                                                                        


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存