funkatron/inspekt

一个使编写安全的Web应用程序更容易的PHP库

0.6.4 2022-02-21 14:51 UTC

This package is not auto-updated.

Last update: 2024-09-17 03:50:20 UTC


README

许可

LICENSE

由以下人员维护

Ben Edmunds benedmunds.com

创建者

Ed Finkler coj@funkatron.com

版本 0.6.3 2022-02-21

什么是Inspekt?

Inspekt是PHP的综合过滤和验证库。

Inspekt背后的驱动原则

  • 通过PHP超级全局变量访问用户输入固有的危险,因为“默认”操作是检索原始的、可能危险的数据
  • 在应用程序源代码的各个地方进行的零散的、“内联”的过滤/验证太容易出错,无法有效
  • 库或框架的目的是让程序员的工作更容易。除非它们是唯一的选择,否则应避免冗长和/或复杂的解决方案

Inspekt的功能

  • 封装输入的'Cage'对象,要求开发人员使用提供的过滤和验证方法来访问输入数据
  • 自动应用配置文件中定义的过滤
  • 静态过滤和验证方法库
  • 简单、清晰的API
  • 无外部依赖

文档

用户文档

API文档

如何使用Inspekt?

目前最好的办法是查看Examples目录。

快速创建常见输入超级全局变量的cage

<?php
use Inspekt\Inspekt;

/*
 * creates a cage for $_GET, $_POST, $_COOKIE, $_ENV, $_FILES, $_SERVER
 */
$superCage = Inspekt::makeSuperCage();

echo 'Digits:' . $superCage->server->getDigits('SERVER_SOFTWARE') . '<p/>';
echo 'Alpha:' . $superCage->server->getAlpha('SERVER_SOFTWARE') . '<p/>';
echo 'Alnum:' . $superCage->server->getAlnum('SERVER_SOFTWARE') . '<p/>';
echo 'Raw:' . $superCage->server->getRaw('SERVER_SOFTWARE') . '<p/>';

从任意数组创建cage

<?php
/**
 * Demonstration of:
 * - use of static filter methods on arrays
 * - creating a cage on an arbitrary array
 * - accessing a deep key in a multidim array with the "Array Query" approach
 */


require_once dirname(__FILE__) . "/../vendor/autoload.php";

use Inspekt\Cage;

$d = array();
$d['input'] = '<img id="475">yes</img>';
$d['lowascii'] = '������� � � � ';
$d[] = array('foo', 'bar<br />', 'yes<P>', 1776);
$d['x']['woot'] = array(
    'booyah' => 'meet at the bar at 7:30 pm',
    'ultimate' => '<strong>hi there!</strong>',
);
$d['lemon'][][][][][][][][][][][][][][] = 'far';


$d_cage = Cage::Factory($d);

var_dump($d_cage->getAlpha('/x/woot/ultimate'));

var_dump($d_cage->getAlpha('lemon/0/0/0/0/0/0/0/0/0/0/0/0/0'));

$x = $d_cage->getAlpha('x');
var_dump($x);

$x = $d_cage->getAlpha('input');
var_dump($x);

调用单个验证方法

<?php
require_once dirname(__FILE__) . "/../vendor/autoload.php";

use Inspekt\Inspekt;

$rs = Inspekt::isUri('http://www.w3.org/2001/XMLSchema');
var_dump($rs);

如何运行测试

安装PHPUnit,切换到Inspekt的根目录,并输入

phpunit tests/

变更日志

版本 0.6.4 - 2022-02-21

  • 发布以强制composer更新

版本 0.6.3 - 2022-02-21

  • 使用ArrayObject而不是Array修复array_key_exists的bug

版本 0.6.2 - 2021-03-12

  • 修复isInt()的bug

版本 0.6.1 - 2016-03-03

  • 修复isFloat()的bug

版本 0.6.0 - 2014-11-08

  • 向后不兼容的破坏!请注意!阅读示例!
  • 删除了CodeIgniter辅助函数
  • 删除了所有session cage代码
  • 重构以符合PSR2规范,包括命名空间(BC破坏)
  • 删除mysql以使用mysqli转义调用

2014-04-14

  • 添加了composer.json文件

版本 0.4.1 - 2010-01-15

  • Inspekt_Cage::keyExists现在再次返回布尔值,除非第二个参数为TRUE(则如果键存在则返回值)
  • 修复了大量缺少的public/protected定义
  • 将Inspekt_CageTest.php重命名为CageTest.php,以便phpunit可以正确加载它
  • 为Inspekt_Cage::testAlnum编写了几个单元测试

版本 0.4.0 - 2009-11-15

  • 添加了通过扩展AccessorAbstract并注册到cage对象来添加cage访问器方法的新方法
  • 添加了Inspekt_Cage::addAccessor()Inspekt_SuperCage::addAccessor()
  • 修改了Examples/extending.php以演示添加新的访问器方法
  • 添加了HTMLPurifier集成功能和新的cage过滤器getPurifiedHTML()
  • 添加了CodeIgniter库,以便在标准输入对象中使用Inspekt
  • Inspekt::isArrayObject()Inspekt::isArrayOrArrayObject() 设为公共方法
  • 向 Inspekt_Cage 添加了 __call() 方法,以便处理用户定义的访问器方法
  • isUri() 的路径部分添加了下划线(Nick Ramsay)
  • Integration_helpers 添加了新的文件夹
  • Cage.php 中注释掉了对 Inspekt/Cage/Session 的包含,因为它在生成 Cage 测试骨架时引起问题
  • 生成了 PHPUnit 的 Inspekt_Cage 测试骨架
  • 添加了一个简单的示例,演示了从 GETPOST 中提取数据的包装器

版本 0.3.5 - 2009-07-18

  • 重构并重写了部分示例;添加了数据库转义示例
  • isInt 进行了一些工作,以便更好地处理 64 位整数(还有更多工作要做)
  • 修复了 isOneOf 中的错误,其中字符串模式未正确转换
  • 删除了方法中的一些错误的可选参数
  • isRegex 现在正确地返回布尔值,而不是整数
  • 添加了缺失的 cage 方法 getROT13noTagsOrSpecialescMySQLescPgSQLescPgSQLBytea
  • 添加了更多的单元测试

版本 0.3.4 - 2009-07-18

  • 添加了 Inspekt::getROT13()
  • 添加了 Inspekt::escMySQL()
  • 添加了 Inspekt::escPgSQL()
  • 添加了 Inspekt::escPgSQLBytea()
  • 现在,只有 cages 将数组转换为 ArrayObjects;传递给静态过滤调用的大数组将返回为数组。
  • 添加了更多单元测试,并将测试移动到 InspektTest.php(删除了 Tests/ 子目录)
  • Inspekt_SuperCage 中进行了清理以修复 STRICT 警告

版本 0.3.3 - 2009-07-18

  • 由于实现了 ArrayObject,现在可以迭代 caged 属性(Matt McKeon)
  • 为 phpunit 测试添加了一系列 @assert 测试
  • 清理了函数声明,以免引发严格警告
  • 在几个过滤方法中利用了 Filter 扩展;可以通过 Inspekt::useFilterExt() 关闭
  • 添加了过滤方法 Inspekt::noTagsOrSpecial(),它删除标签、编码 '"&<> 和所有低 ASCII 字符(小于 32)
  • 将递归限制提高到 15
  • Inspekt::_walkArray 现在将普通数组转换为 ArrayObject(应该总是这样做吗?不确定)
  • 过滤方法现在将使用 Inspekt::isArrayOrArrayObject() 来确定是否需要遍历数组
  • 修复了一些 require_once 语句,以使用 dirname() 解决方案,以减少路径问题(当使用 phpunit 时出现这些问题)

版本 0.3.2 - 2009-06-22

现在需要 PHP5,修复了转置参数的漏洞

版本 0.3.1 - 2008-02-08

禁用了对 $_SESSION 的处理

版本 0.3.0 - 2008-01-16

最终 OWASP 里程碑版本

版本 0.1 - 2007-05-19

首次发布