推荐阅读
  • PHP 高级过滤器

    PHP 高级过滤器 检测一个数字是否在一个范围内 以下实例使用了 filter_var() 函数来检测一个 INT 型的变量是否在 1 到 200 内: 实例 <?php$int = 122;$min = 1;$max = 200;if (filter_var($int, FILTER_VALIDATE_INT, array('options'

  • PHP Libxml

    PHP Libxml 函数 PHP Libxml 简介 Libxml 函数和常量与 SimpleXML、XSLT 以及 DOM 函数一起使用。 安装 这些函数需要 Libxml 程序包。 在 xmlsoft.org 下载 PHP Libxml 函数 PHP:指示支持该函数的最早的 PHP 版本。 函数 描述 PHP libxml_clear_errors()

  • AJAX 实时搜索

    PHP 实例 - AJAX 实时搜索 AJAX 可为用户提供更友好、交互性更强的搜索体验。 AJAX Live Search 在下面的实例中,我们将演示一个实时的搜索,在您键入数据的同时即可得到搜索结果。 实时的搜索与传统的搜索相比,具有很多优势: 当键入数据时,就会显示出匹配的结果 当继续键入数据时,对结果进行过滤 如果结果太少,删除字符就可以获得更宽的范围 在下面的文本框中输入

  • PHP SimpleXML

    PHP 5 SimpleXML 函数 PHP SimpleXML 简介 SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式,只要您知道 XML 文档的布局。 SimpleXML 转换 XML 文档到 SimpleXMLElement 对象。 通过正常的属性选择器和数组迭代器,这个对象能够像其他对象一样被处理。 提示:与 DOM 或者 Expat 解析器比较,SimpleX

  • PHP MySQL 连接

    PHP 连接 MySQL PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ('i' 意为 improved) PDO (PHP Data Objects) 在 PHP 早期版本中我们使用 MySQL 扩展。但该扩展在 2012 年开始不建议使用。 我是该用 MySQLi ,还是 PDO? 如果你需要一个简短的回答,即

  • AJAX 简介

    AJAX 简介 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 AJAX 是什么? AJAX = Asynchronous JavaScript and XML. AJAX 是一种用于创建快速动态网页的技术。 AJAX 通过在后台与服务器进行少量数据交换,使网页实现异步更新。这意味着可以在不重载整个页面的情况下,对网页的某些部分进行更新。 传统的网页(不使用 AJA

  • PHP 数组

    PHP 数组 数组能够在单个变量中存储多个值: 实例 [mycode3 type='php'] [/mycode3] 运行实例 » 数组是什么? 数组是一个能在单个变量中存储多个值的特殊变量。 如果您有一个项目清单(例如:车名字的清单),将其存储到单个变量中,如下所示: $cars1='Volvo'; $cars2='BMW&#

  • PHP 包含

    PHP 包含文件 PHP include 和 require 语句 在 PHP 中,您可以在服务器执行 PHP 文件之前在该文件中插入一个文件的内容。 include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码。 include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的: require 生成一个致命错误(E_COMPILE_ERROR)

  • PHP Cookie

    PHP Cookie cookie 常用于识别用户。 Cookie 是什么? cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。 如何创建 Cookie? setcookie() 函数用于设置 cookie。 注释:setcookie

  • AJAX 数据库

    PHP - AJAX 与 MySQL AJAX 可用来与数据库进行交互式通信。 AJAX 数据库实例 下面的实例将演示网页如何通过 AJAX 从数据库读取信息: 本教程使用到的 Websites 表 SQL 文件:websites.sql。 实例 function showSite(str) { if (str=='') { document.getEle

PHP 安全 E-mail

在上一节中的 PHP e-mail 脚本中,存在着一个漏洞。

PHP E-mail 注入

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


<html>

<head>

<meta charset="utf-8">

<title>爱学习网教程(lvstudy.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 注入的最好方法是对输入进行验证。

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


<html>

<head>

<meta charset="utf-8">

<title>爱学习网教程(lvstudy.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_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 Filter 中阅读更多关于过滤器的知识。

关于我们 免责声明 联系我们
Copyright © 2020 爱学习网 浙ICP备18049359号 网站地图 Google地图