`

PHP 安全的电子邮件

    博客分类:
  • php
php 
阅读更多

PHP 安全的电子邮件
PHP E-mail
PHP Error
在上一节中的 PHP e-mail 脚本中,存在着一个漏洞。
PHP E-mail 注入
首先,请看上一节中的 PHP 代码:
<html>
<body>

<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
  {
  //send email
  $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
//if "email" is not filled out, display the form
  {
  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>
<body>
<?php
function spamcheck($field)
  {
  //filter_var() sanitizes the e-mail 
  //address using FILTER_SANITIZE_EMAIL
  $field=filter_var($field, FILTER_SANITIZE_EMAIL);
  
  //filter_var() validates the e-mail
  //address using FILTER_VALIDATE_EMAIL
  if(filter_var($field, FILTER_VALIDATE_EMAIL))
    {
    return TRUE;
    }
  else
    {
    return FALSE;
    }
  }

if (isset($_REQUEST['email']))
  {//if "email" is filled out, proceed

  //check if the email address is invalid
  $mailcheck = spamcheck($_REQUEST['email']);
  if ($mailcheck==FALSE)
    {
    echo "Invalid input";
    }
  else
    {//send email
    $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
  {//if "email" is not filled out, display the form
  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开发中,发送电子邮件是一项常见的任务,尤其在通知用户、提供订阅服务或者处理网站反馈时。`PHPMailer`是一个广泛使用的开源库,用于在PHP应用程序中方便地发送邮件。这个库包括两个主要的文件:`class....

    电子邮件收发系统 php 源码(精心收集)

    电子邮件收发系统是基于PHP开发的一种用于发送和接收邮件的应用程序。PHP是一种广泛使用的开源脚本语言,尤其在Web开发领域中,它以其简洁、高效和丰富的库支持而备受青睐。这个精心收集的PHP源码提供了学习和实现...

    php案例 之电子邮件收发系统

    在PHP编程领域,电子邮件收发系统是一个常见的应用场景,它允许用户通过Web界面发送和接收电子邮件。这个案例将探讨如何利用PHP实现这样的系统,涉及到的主要知识点包括SMTP协议、PHPMailer库的使用、邮件格式化以及...

    PHP+MYSQL电子邮件

    【PHP+MYSQL电子邮件系统详解】 在信息技术领域,PHP与MySQL是两种非常常见的开源技术,广泛应用于网站开发,尤其是用于创建动态、交互式的Web应用程序。PHP是一种服务器端的脚本语言,而MySQL则是一款关系型数据库...

    电子邮件收发系统(php)

    电子邮件收发系统是一种基于Web的通信工具,它允许用户通过PHP编程语言来发送和接收电子邮件。这个系统的核心功能包括配置POP3服务器以接收邮件,以及可能的IMAP支持以实现更高级的邮件管理。下面我们将深入探讨这个...

    PHPMailer一个全功能的电子邮件创建和发送PHP类

    PHPMailer是一个广泛使用的开源PHP库,专为PHP开发者设计,用于方便、高效地创建和发送电子邮件。这个库包含了丰富的功能,使得在Web应用程序中处理邮件变得简单易行。标题和描述都强调了PHPMailer是一个全面的电子...

    PHP 发送电子邮件

    在PHP中发送电子邮件是一项常见的任务,它涉及到网络通信和邮件协议的理解。PHP提供了一个内置的mail()函数,以及一些第三方库如PHPMailer和SwiftMailer,用于更复杂的邮件发送需求。以下将详细介绍如何使用PHP发送...

    利用php实现电子邮件功能

    在PHP中实现电子邮件功能是一项常见的任务,这通常涉及到与邮件服务器进行交互,发送文本或HTML格式的邮件,以及可能地附带附件。本教程将详细阐述如何使用PHP来完成这一目标,同时考虑到数据库的集成和程序部署。 ...

    基于PHP的Mailer用于发送电子邮件的函数包(4,5多版本)源码.zip

    【PHPMailer】是一种广泛使用的PHP库,专门设计用于发送电子邮件。这个函数包支持PHP 4和5的不同版本,使得在不同环境下都能灵活地处理邮件发送功能。PHPMailer提供了丰富的选项和错误处理机制,使得开发者可以方便...

    电子邮件定时发送

    电子邮件定时发送是信息技术中一种常见的应用场景,特别是在商业环境中,用于自动化地向用户推送促销、...通过合理的设计和实现,可以构建一个高效、安全的电子邮件定时发送系统,满足商家向用户定期推送信息的需求。

    php电子邮件服务器搭建

    在PHP开发中,发送电子邮件是一项常见的任务,尤其对于网站通知、用户注册验证或者忘记密码重置等场景。本文将深入探讨如何在PHP环境下利用PHPMailer类库快速搭建一个高效的PHP邮件服务器。 首先,PHPMailer是一个...

    PHP 发送电子邮件详解.md

    ### PHP 发送电子邮件详解 #### 一、PHP发送电子邮件的基础 在PHP中,发送电子邮件是一项基本功能,可以使用内置的`mail()`函数实现。但是,需要注意的是,`mail()`函数的功能依赖于服务器上的邮件发送工具(例如...

    php开源web邮件系统。

    PHP开源Web邮件系统是一种基于PHP语言开发的,用于构建Web端电子邮件服务的应用程序。这种系统允许用户通过浏览器访问和管理他们的邮件,无需依赖特定的桌面邮件客户端。它通常包括一系列功能,如收发邮件、管理联系...

    电子邮件开发

    在这个领域,我们通常会使用PHP这样的编程语言来构建和处理电子邮件功能。以下是一些关于电子邮件开发的重要知识点: 1. **邮件协议**:电子邮件系统主要基于SMTP(Simple Mail Transfer Protocol)发送邮件,而...

    PHP实例开发源码—PHPMailer 用于发送电子邮件的PHP函数包(php4,php5多版本).zip

    PHPMailer 是一个流行的开源PHP库,专门用于处理电子邮件的发送任务。这个库支持多种协议,如SMTP、PHP mail() 函数以及sendmail,使得开发者能够灵活地选择最适合他们服务器环境的邮件发送方式。PHPMailer 适用于...

    PHPMailer-6.6.4.zip php收发邮件类库

    PHPMailer 是一个广泛使用的开源PHP类库,专为发送电子邮件而设计。在6.6.4版本中,它提供了强大的功能和灵活性,使得在PHP环境中处理邮件收发变得简单易行。这个类库支持多种SMTP验证方式,包括PLAIN、LOGIN、CRAM-...

    怎样用php发送电子邮件?还有发电子邮件的一个开源包phpmailer。

    在PHP中发送电子邮件是一项常见的任务,特别是在开发Web应用程序时,我们可能需要向用户发送确认邮件、通知或密码重置链接。`PHPMailer`是一个广泛使用的开源包,它为PHP提供了强大的邮件发送功能,支持SMTP验证、...

    php发邮件 phpMailer

    PHPMailer是一个流行的PHP库,它允许开发者通过PHP发送电子邮件。本篇文章将深入探讨如何使用PHPMailer来发送邮件以及相关的重要知识点。 首先,我们需要了解PHPMailer的基本用法。在你的项目中引入PHPMailer_v2.3...

    php注册发送邮件

    但考虑到现代电子邮件的标准和安全性,通常会使用如PHPMailer或SwiftMailer这样的第三方库。 1. PHPMailer库的使用: PHPMailer是一个流行的PHP邮件发送库,支持HTML邮件、附件、SMTP验证等功能。要使用PHPMailer...

    php web收发邮件

    在PHP中实现Web收发邮件是一项常见的功能,它允许用户通过网页界面来处理电子邮件。本文将深入探讨如何使用PHP和一些流行的开源库来构建这样的系统,同时也会提及SquirrelMail,一个知名的Web邮件客户端。 首先,...

Global site tag (gtag.js) - Google Analytics