当前位置 : IT培训网 > PHP开发 > php教程 > php教程之PHP安全邮件

php教程之PHP安全邮件

时间:2016-11-30 10:05:21  来源:php培训网  作者:郑州IT培训网  已有:名学员访问该课程
今天,IT培训网小编要和大家分享的是php教程之php安全E-mail,在上一节中的 PHP e-mail 脚本中,存在着一个漏洞。

今天,IT培训网小编要和大家分享的是php教程之php安全E-mail,在上一节中的 PHP e-mail 脚本中,存在着一个漏洞。

  PHP E-mail 注入

  首先,请看上一章中的 PHP 代码:

  <html>

  <head>

  <meta charset="utf-8">

  <title>IT培训网(itpxw.cn)</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 注入的最好方法是对输入进行验证。

  下面的代码与上一章中的类似,不过这里我们已经增加了检测表单中 email 字段的输入验证程序:

  <html>

  <head>

  <meta charset="utf-8">

  <title>IT培训网(itpxw.cn)</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_EMAIL

  if(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 过滤器验证电子邮件地址的值

       今天的php教程基础知识就分享到这里了,后续小编会继续和大家分享php教程基础知识,爱学习的小伙伴加油了。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
------分隔线----------------------------
PHP 教程
1、PHP 基础
1.1 PHP 简介
1.2 PHP 安装
1.3 PHP 语法
1.4 PHP 变量
1.5 PHP echo/print
1.6 PHP 数据类型
1.7 PHP 常量
1.8 PHP 字符串
1.9 PHP 运算符
1.10 PHP If...Else
1.11 PHP Switch
1.12 PHP 数组
1.13 PHP 数组排序
1.14 PHP 超级全局变量
1.15 PHP While 循环
1.16 PHP For 循环
1.17 PHP 函数
1.18 PHP 魔术变量
1.19 PHP 命名空间
1.20 PHP 面向对象
2、PHP 表单
2.1 PHP 表单
2.2 PHP 表单验证
2.3 PHP 表单 - 必需字段
2.4 PHP 表单 - 验证邮件和URL
2.5 PHP 完整表单实例
2.6 PHP $_GET 变量
2.7 PHP $_POST 变量
3、PHP 高级教程
3.1 PHP 多维数组
3.2 PHP 日期
3.3 PHP 包含
3.4 PHP 文件
3.5 PHP 文件上传
3.6 PHP Cookie
3.7 PHP Session
3.8 PHP E-mail
3.9 PHP 安全 E-mail
3.10 PHP Error
3.11 PHP 过滤器
3.12 PHP 高级过滤器
3.13 PHP JSON
4、PHP 7 新特性
4.1 PHP 7 新特性
5、PHP 数据库
5.1 PHP MySQL 简介
5.2 PHP MySQL 连接
5.3 PHP MySQL 创建数据库
5.4 PHP MySQL 创建数据表
5.5 PHP MySQL 插入数据
5.6 PHP MySQL 插入多条数据
5.7 PHP MySQL 预处理语句
5.8 PHP MySQL 读取数据
5.9 PHP MySQL Where
5.10 PHP MySQL Order By
5.11 PHP MySQL Update
5.12 PHP MySQL Delete
5.13 PHP ODBC
6、PHP XML
6.1 XML Expat Parser
6.2 XML DOM
6.3 XML SimpleXML
7、PHP 与 AJAX
7.1 AJAX 简介
7.2 AJAX 与PHP
7.3 AJAX 数据库
7.4 AJAX XML
7.5 AJAX 实时搜索
7.6 AJAX RSS Reader
7.7 AJAX 投票