當前位置 : 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培訓網(cnitedu.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培訓網(cnitedu.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 投票
五月情天