Web应用安全之发送邮件

问题概要

1.邮件头注入

2.使用hidden参数保存收件人信息

3.邮件服务器的开放转发


邮件头注入

指通过邮件消息中的收件人或标题等字段中插入换行符,从而添加新的邮件头字段或篡改邮件正文的攻击手段。

影响如下:
1.标题,发件人,或正文被更改
2.被用来发送垃圾邮件
3.被用来发送病毒邮件

防范方法:
1.邮件头仲不允许包含外界传入的参数
2.通过校验不允许外界传入的参数包含换行符

一般采用mb_send_mail来发送邮件,各个参数为
mb_send_mail(“收件人地址”,“标题”,“正文”,. $body,“From:”.$from)
上述函数采用第四个函数(附加邮件头)指定发送人(From)地址。

关于第四个函数
additional_headers被插入在邮件头的末尾。常用于增加额外的头。通过换行符(“\n”)进行分隔,可以指定多个头。

攻击方式1
添加收件人
通过换行输入多个邮件地址,如图

发送后,两个邮箱都收到,但是第一个邮箱不知道该邮件也发给了第二个邮箱,因为添加第二个邮箱时,采用了Bcc(密送)的方式。

攻击方式2
篡改正文
在邮件地址后加入一行空格即可
trap@trap.example.com
Bcc:bob@example.com

Hack!!!!
实际攻击中会使用大量空行迷惑用户,或者使用MIME来隐藏后面的正文消息。

攻击方式3
添加附件
恶意利用MIME的multipart/mixed形式。

产生原因

邮件消息格式:
与HTTP类似
消息头:
To:wasbook@example.jp
Subject: =?ISO-2022-JP?B?GyRCTGQkJDlnJG8kOyQsJCIbKEI=?==?ISO-2022-JP?B?GyRCTGQkJDlnJG8kOyQsJCIbKEI=?=
From: alice@example.jp
Content-Type: text/plain; charset=ISO-2022-JP
空行
正文:dhaiuogdoiagd

To为收件人,Subject为标题,From为发件人地址。邮件头注入的主要原因与HTTP消息头注入漏洞类似。消息头中各字段以换行符分开,因此,如果能够在外界传入的参数插入换行符,那么就可以添加新的消息头

对策
1.使用专门的程序库来发送邮件

2.不将外界传入的参数包含在邮件头中

3.发送邮件时确保外界传入的参数不包含换行符
不直接调用mb_send_mail,编写专用用于发送邮件的包装函数,并在函数中校验换行符。
另外,在框架提供的发送邮件功能中嵌入校验换行符也有效。

4.输入校验

5.校验邮箱地址

6.校验标题校验控制字符,只与控制字符以外的字符相匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值