PHP 安全email
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相关推荐
- 解决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 ...
- 正则表达式用户名密码电话身份证Email使用
月末了,这个月才写了2遍文章,对自己略感失望了,最近是有些忙,等闲些日子后,再整理一些文章分享给大家! 这遍是关于正则表达式,因为写项目时要用到正则表达式,所以就学习了下,另写一遍文章,方便记忆! 1 ...
- remote: error: GH007: Your push would publish a private email address.
最近,在学习Github的过程中遇到的问题:remote: error: GH007: Your push would publish a private email address. 使用命令:gi ...
- 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 ...
- asp.net实现在网页上自动显示超链接以及Email地址
人们总喜欢在帖子中加上各种有用的URL链接或Email地址.而笔者当初设计时没有考虑到这一点,使得这些URL链接或Email地址只能以文字的形式而并不是以超链接的形式显示,其它浏览帖子的人还必须把这些 ...
- EMAIL发送系统(C#+基于SMTP认证) 2.0
这个是对于 EMAIL发送系统(C#+基于SMTP认证) 1.0 的改版这个第一版是2002年11月写的,过了一年半了,才有人提意见,就修正了一下,因为后来做的项目一直用不上,也就没有注意到 前段时间 ...
- ASP.NET结合COM组件发送Email
在开发电子邮件发送程序的时候,我们经常需要使用到相应的组件,其实不需要第三方的组件(例如:Jmail)照常可以做到发送Email的功能. 在系统目录(如c:/winnt或c:/windows)的sys ...
- 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 ...
- 如何设置 Linux 上 SSH 登录的 Email 提醒
如何设置 Linux 上 SSH 登录的 Email 提醒 虚拟私有服务器 (VPS)上启用 SSH 服务使得该服务器暴露到互联网中,为黑客攻击提供了机会,尤其是当 VPS 还允许root 直接访问时 ...
- 在思科模拟器下搭建WWW、DNS、FTP、Email服务
目录 一.搭建基本的拓扑结构 二.配置基本IP 三.配置静态路由 Router0: Router1: 四.搭建WWW服务 0号服务器: 1号服务器: 五.在pc0上测试www服务 六.搭建FTP服务 ...
最新文章
- debian/ubuntu下安装java8
- 过年回家抢票不求人,试试这个开源抢票神器吧!
- 洛谷 2680 (NOIp2015) 运输计划
- angular 兼容ie7 bootstrap2兼容ie6
- ps -aux返回超过100%
- java线程集合点_Jmeter集合点(线程组和同步定时器)
- 谁动过你的电脑?小姐姐们要学会保护好自己电脑里的小秘密呀
- innodb的锁时间
- RPG游戏开发基础教程
- 究竟是谁弄脏了我们的世界
- 软考架构设计师论文(微服务)
- android开发 问卷调查案例_基于-Android问卷调查APP开发与设计.pdf
- Python带HTML表格图片的自动邮件发送
- 赵鑫:简单技术指标的高明运用
- 红米note5解锁教程_红米note手机密码忘了怎么解锁
- 自定义店招应该具有的基本功能
- CC00069.CloudKubernetes——|KuberNetes二进制部署.V22|3台Server|——|TLS_Bootstrapping|自动颁发证书|
- web前端开发相关网站
- Lifecycle 使用与源码分析——彻底搞懂Lifecycle原理
- common.io中Tailer类读取文件内容乱码问题解决