2019独角兽企业重金招聘Python工程师标准>>>

PHP E-mail 注入

<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body><?php
if (isset($_REQUEST['email'])) { // 如果接收到邮箱参数则发送邮件// 发送邮件$email = $_REQUEST['email'] ;$subject = $_REQUEST['subject'] ;$message = $_REQUEST['message'] ;mail("someone@example.com", $subject,$message, "From:" . $email);echo "邮件发送成功";
} else { // 如果没有邮箱参数则显示表单echo "<form method='post' action='mailform.php'>Email: <input name='email' type='text'><br>Subject: <input name='subject' type='text'><br>Message:<br><textarea name='message' rows='15' cols='40'></textarea><br><input type='submit'></form>";
}
?></body>
</html>

以上代码存在的问题是,未经授权的用户可通过输入表单在邮件头部插入数据。

假如用户在表单中的输入框内加入如下文本到电子邮件中,会出现什么情况呢?

someone@example.com%0ACc:person2@example.com
%0ABcc:person3@example.com,person3@example.com,
anotherperson4@example.com,person5@example.com
%0ABTo:person6@example.com

与往常一样,mail() 函数把上面的文本放入邮件头部,那么现在头部有了额外的 Cc:、Bcc: 和 To: 字段。当用户点击提交按钮时,这封 e-mail 会被发送到上面所有的地址!

PHP 防止 E-mail 注入

防止 e-mail 注入的最好方法是对输入进行验证。

<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<?php
function spamcheck($field)
{// filter_var() 过滤 e-mail// 使用 FILTER_SANITIZE_EMAIL$field=filter_var($field, FILTER_SANITIZE_EMAIL);//filter_var() 过滤 e-mail// 使用 FILTER_VALIDATE_EMAILif(filter_var($field, FILTER_VALIDATE_EMAIL)){return TRUE;}else{return FALSE;}
}if (isset($_REQUEST['email']))
{// 如果接收到邮箱参数则发送邮件// 判断邮箱是否合法$mailcheck = spamcheck($_REQUEST['email']);if ($mailcheck==FALSE){echo "非法输入";}else{    // 发送邮件$email = $_REQUEST['email'] ;$subject = $_REQUEST['subject'] ;$message = $_REQUEST['message'] ;mail("someone@example.com", "Subject: $subject",$message, "From: $email" );echo "Thank you for using our mail form";}
}
else
{ // 如果没有邮箱参数则显示表单echo "<form method='post' action='mailform.php'>Email: <input name='email' type='text'><br>Subject: <input name='subject' type='text'><br>Message:<br><textarea name='message' rows='15' cols='40'></textarea><br><input type='submit'></form>";
}
?></body>
</html>

在上面的代码中,我们使用了 PHP 过滤器来对输入进行验证:

  • FILTER_SANITIZE_EMAIL 过滤器从字符串中删除电子邮件的非法字符
  • FILTER_VALIDATE_EMAIL 过滤器验证电子邮件地址的值

转载于:https://my.oschina.net/zsyzone/blog/1586267

PHP 安全email相关推荐

  1. 解决gitte提交报错 error: GE007: Your push would publish a private email address.

    错误情况: gitte提交报错,无法提交上去,报错如下: remote: Powered by GITEE.COM [GNK-6.0] remote: error: GE007: Your push ...

  2. 正则表达式用户名密码电话身份证Email使用

    月末了,这个月才写了2遍文章,对自己略感失望了,最近是有些忙,等闲些日子后,再整理一些文章分享给大家! 这遍是关于正则表达式,因为写项目时要用到正则表达式,所以就学习了下,另写一遍文章,方便记忆! 1 ...

  3. remote: error: GH007: Your push would publish a private email address.

    最近,在学习Github的过程中遇到的问题:remote: error: GH007: Your push would publish a private email address. 使用命令:gi ...

  4. Setting the Reply-To Header in an Email using CDONTS.NewMail Object and CDO Message

    代码  1 <%  2 Option Explicit  3   4 Dim objMail  5 Dim strSubject  6 Dim strBody  7   8 strSubject ...

  5. asp.net实现在网页上自动显示超链接以及Email地址

    人们总喜欢在帖子中加上各种有用的URL链接或Email地址.而笔者当初设计时没有考虑到这一点,使得这些URL链接或Email地址只能以文字的形式而并不是以超链接的形式显示,其它浏览帖子的人还必须把这些 ...

  6. EMAIL发送系统(C#+基于SMTP认证) 2.0

    这个是对于 EMAIL发送系统(C#+基于SMTP认证) 1.0 的改版这个第一版是2002年11月写的,过了一年半了,才有人提意见,就修正了一下,因为后来做的项目一直用不上,也就没有注意到 前段时间 ...

  7. ASP.NET结合COM组件发送Email

    在开发电子邮件发送程序的时候,我们经常需要使用到相应的组件,其实不需要第三方的组件(例如:Jmail)照常可以做到发送Email的功能. 在系统目录(如c:/winnt或c:/windows)的sys ...

  8. android intent email,Android Email Intent

    问题 I've set up two buttons. One opens the compose sms intent and the other opens the compose email i ...

  9. 如何设置 Linux 上 SSH 登录的 Email 提醒

    如何设置 Linux 上 SSH 登录的 Email 提醒 虚拟私有服务器 (VPS)上启用 SSH 服务使得该服务器暴露到互联网中,为黑客攻击提供了机会,尤其是当 VPS 还允许root 直接访问时 ...

  10. 在思科模拟器下搭建WWW、DNS、FTP、Email服务

    目录 一.搭建基本的拓扑结构 二.配置基本IP 三.配置静态路由 Router0: Router1: 四.搭建WWW服务 0号服务器: 1号服务器: 五.在pc0上测试www服务 六.搭建FTP服务 ...

最新文章

  1. debian/ubuntu下安装java8
  2. 过年回家抢票不求人,试试这个开源抢票神器吧!
  3. 洛谷 2680 (NOIp2015) 运输计划
  4. angular 兼容ie7 bootstrap2兼容ie6
  5. ps -aux返回超过100%
  6. java线程集合点_Jmeter集合点(线程组和同步定时器)
  7. 谁动过你的电脑?小姐姐们要学会保护好自己电脑里的小秘密呀
  8. innodb的锁时间
  9. RPG游戏开发基础教程
  10. 究竟是谁弄脏了我们的世界
  11. 软考架构设计师论文(微服务)
  12. android开发 问卷调查案例_基于-Android问卷调查APP开发与设计.pdf
  13. Python带HTML表格图片的自动邮件发送
  14. 赵鑫:简单技术指标的高明运用
  15. 红米note5解锁教程_红米note手机密码忘了怎么解锁
  16. 自定义店招应该具有的基本功能
  17. CC00069.CloudKubernetes——|KuberNetes二进制部署.V22|3台Server|——|TLS_Bootstrapping|自动颁发证书|
  18. web前端开发相关网站
  19. Lifecycle 使用与源码分析——彻底搞懂Lifecycle原理
  20. common.io中Tailer类读取文件内容乱码问题解决

热门文章

  1. android 课程——样式
  2. Windows 7运行命令大全
  3. 解决table边框在打印中不显示的问题
  4. Unit24 What's on TV tonight?
  5. using 的三种用法
  6. 别让用户发呆——设计中的防呆策略
  7. apache workprefork
  8. 软件公司因女员工怀二胎拒绝与其续约
  9. linux中shell脚本启动报错
  10. Lucene+Tika 文件索引的创建与搜索