Copyright © 2014 PINMEI All Rights Reserve 蜀ICP备10208954号-6

PHP发送安全邮件

PHP中,上节介绍了关于mail函数的使用。下面我们来看看代码:

  1.  
  2.  
  3.  
  4. <?php 
  5. if (isset($_REQUEST['email'])) 
  6.  { 
  7.   $email = $_REQUEST['email'] ;  
  8.   $subject = $_REQUEST['subject'] ; 
  9.   $message = $_REQUEST['message'] ; 
  10.   mail("123456789@qq.com""Subject: $subject"
  11.   $message"From: $email" ); 
  12.   } 
  13. else 
  14.   { 
  15.   echo "<form method='post' action='mailform.php'
  16.   Email: <input name='email' type='text' />  
  17.   Subject: <input name='subject' type='text' />  
  18.   Message:  
  19.   <textarea name='message' rows='15' cols='40'
  20.     
  21.   <input type='submit' /> 
  22.   "; 
  23.   } 
  24. ?> 
  25.  
  26.  
  27.  

 以上代码存在的问题是,未经授权的用户可通过输入表单在邮件头部插入数据。当在头部插入额外的字符串时,发送的邮件就会发送到注入的邮箱中。为了防止注入,最好的方法就是对输入进行验证。

  1.  
  2.  
  3. <?php 
  4. function spamcheck($field
  5.   { 
  6.   $field=filter_var($field, FILTER_SANITIZE_EMAIL); 
  7.    
  8.   if(filter_var($field, FILTER_VALIDATE_EMAIL)) 
  9.     { 
  10.     return TRUE; 
  11.     } 
  12.   else 
  13.     { 
  14.     return FALSE; 
  15.     } 
  16.   } 
  17.  
  18. if (isset($_REQUEST['email'])) 
  19.   { 
  20.   $mailcheck = spamcheck($_REQUEST['email']); 
  21.   if ($mailcheck==FALSE) 
  22.     { 
  23.     echo "Invalid input"
  24.     } 
  25.   else 
  26.     { 
  27.     $email = $_REQUEST['email'] ;  
  28.     $subject = $_REQUEST['subject'] ; 
  29.     $message = $_REQUEST['message'] ; 
  30.     mail("123456789@qq.com""Subject: $subject"
  31.     $message"From: $email" ); 
  32.     } 
  33.   } 
  34. else 
  35.   { 
  36.   echo "<form method='post' action='mailform.php'
  37.   Email: <input name='email' type='text' />  
  38.   Subject: <input name='subject' type='text' />  
  39.   Message:  
  40.   <textarea name='message' rows='15' cols='40'
  41.     
  42.   <input type='submit' /> 
  43.   "; 
  44.   } 
  45. ?> 
  46.  
  47.  
  48.  

我们使用了 PHP 过滤器来对输入进行验证:

FILTER_SANITIZE_EMAIL 从字符串中删除电子邮件的非法字符

FILTER_VALIDATE_EMAIL 验证电子邮件地址

我们在手机网站开发时也要注意哦,一定要验证哦!!!