专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » php扩展:PHP V5.2 中的新增功能 第 2 部分: 使用新输入过滤扩展功能 »正文

php扩展:PHP V5.2 中的新增功能 第 2 部分: 使用新输入过滤扩展功能

来源: 发布时间:星期一, 2009年1月12日 浏览:35次 评论:0
  本文是共有 5部分系列文章第 2部分我们将继续介绍 PHP V5.2 新增功能本文主要介绍输入过滤

  接受用户输入或来自不受信任来源任何其他数据是 PHP 开发人员在开发应用时可能承担最常见风险的您经常需要引入来自未知来源数据以使应用运行但是这就给黑客提供了插入任意代码或以其他方式使用应用机会从 PHP V5.2 开始输入过滤扩展功能将被默认启用以使您可以更轻松地针对此类操作采取措施输入过滤扩展功能提供了来解析和检查输入然后在中使用此输入

  我们将考察使用这些解析和检查输入而不进行手动编码原因并介绍些如何使用这些新基本举例

  从任何个位置输入

  输入是大多数应用关键我们应用将接收大量信息并使用微处理器能力来处理这些信息我们可以控制输入进入应用位置但是我们不能控制输入此数据用户意图PHP 最初被开发为种轻松思路方法用于开发从 HTML 表单收集输入脚本它现在功能早已不限于此了但是我们现在仍然在用它来收集和操作来自许多不受信任数据即使是单独数据输入职员也可能无意识地向应用发送些问题数据甚至也必须将其视为不受信任

  安全是目前十分热门问题并且随着每次通过硬件和软件Software修订而变得更加热门我们总是说得很好听但是由于情况很复杂因此我们往往在系统保护关键点 —— 输入上做得差强人意思路方法有很多并且实现起来很复杂我们完成应用有严格最后期限并且必须履行项目经理(project manager)最后期限

  保护自己免于恶意代码攻击种思路方法是确保接收到预期输入在本文中我们将查看个阻止用户输入不适当 JavaScript 举例并向您展示如何将那些标记从输入中剥离出来返回实际需要内容

  PHP V5.0 以后版本中提供了输入过滤扩展功能以使您可以更轻松地获得安全性PHP V5.2 版本首次默认启用了此功能并实现了开箱即用

  验证和过滤对比

  在您编程经历中可能听说过术语:输入验证它是应用开发过程中至关重要部分用于确保传入数据在上下文和内容上都是正确员可以通过正则表达式和测试来查看值是否满足标准(例如要求输入电子邮件地址并需要确保输入格式正确时)如果需要排除 Hotmail 或 Gmail 等免费电子邮件地址也可以借助此思路方法您将使用正则表达式来阻止包含 “hotmail.com” 或 “gmail.com” 任何电子邮件地址

  通常认为这类 “处理基本检查以确保输入数据满足某种标准” 就是验证在这种情况下需要确保不必清理数据或者确实可获得查找数据验证目标就是要避免些简单例如尝试将 NULL 放入不接受这种值字段

  数据或恶意构造数据导致可能带来毁灭性后果您将需要全力实现种更全面过滤此信息思路方法这种思路方法需涵盖针对每种数据类型所有可能测试而不是执行千篇任务或重复任务通常您可能没注意到测试或编写不完整正则表达式过滤器扩展功能将帮助提供更完整输入评估同时减少重复代码编写工作在这种情况下过滤和验证区别的处就在于过滤在安全性上更全面

  过滤器类型以及如何选择

  让我们进步查看扩展功能详细信息过滤扩展功能有两种过滤器:Sanitizing 和 Logical

  Sanitizing 过滤器只是允许或禁止串中并将清理后串作为结果返回无论您将哪种数据格式传入这些它们将始终返回对于特定类型使用这是至关重要您可以阻止用户发送不适当输入并导致异常结果例如用户可以发现文本块输入被返回到以下页面上并且要利用那些返回信息如果清理输入则将删除输入所有危险部分

  Logical 过滤器将对变量执行测试并根据测试提供 true 或 false 结果然后您可以使用结果来决定如何处理数据或获得用户地址这种过滤器简单举例是验证年龄逻辑测试还可以针对类似 Perl 正则表达式进行测试

  让我们看看在进行过滤和验证时使用这些些思路方法了解如何将过滤引入应用

  整理行为

  让我们开始使用过滤扩展功能清理应用来过滤不需要代码块

  在这个举例应用您有张简单表单它接收 3个问题和 3个答案表单本身没有使用验证或过滤查看源代码时个不幸用户相信这是真并且决定通过编写包括抛出警报 JavaScript 文本块来测试表单如果警报弹出告诉他输入所有内容都将真正被接受并由应用使用而不进行过滤这将证明他是正确

  清单 1. 简单输入表单

<html>
<body>
<p>What is your name?</p>
<form name="form1" method="get" action="filteringexample1a.php">
  <p>
   <input name="1" type="text" id="1">
</p>
  <p>What is your favorite color?</p>
  <p>
   <input name="2" type="text" id="2">
  </p>
  <p>What is the airspeed of an unladen swallow?</p>
  <p>
   <textarea name="3" id="3"></textarea>
  </p>
  <p>
   <input type="submit" name="Submit" value="Submit">
</p>
</form>
</body>
</html>


  清单 1 是接受用户输入常见 HTML 表单要求用户提供些基本信息并且简单地将其返回而不进行任何其他操作在图 1 中您可以看到用户已经输入了些信息并准备发送 JavaScript 代码如果不完成清理工作这段 JavaScript 代码将发送警报

  图 1. 输入表单

Echo "<h1>WRONG!</h1>";
}{
echo "The airspeed of an unladen swallow is " . $airspeed . ".nn";
}
?>



  我们已经遵从逻辑测试成功地测试了传入数据并且向用户显示了正确结果或者些负面反馈不管怎样我们已经使用了过滤器来确保为输入提供了正确答案

  结束语

  “PHP V5.2 中新增功能” 这系列文章(共 5部分)第 2 部分集中介绍了输入过滤我们查看了以下两者差异:简单输入验证以捕获不要求任何清理简单以及旨在捕获潜在更具破坏性输入和问题输入过滤然后查看了两种类型过滤扩展功能:Sanitizing 和 Logical并浏览了两者举例在第 3 部分中我们将查看新 JSON 扩展功能它将为 PHP 开发人员开发 Ajax 应用(使用 JSON )提供更好支持



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: