funkatron / inspekt
一个使编写安全的Web应用程序更容易的PHP库
0.6.4
2022-02-21 14:51 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- ezyang/htmlpurifier: 4.6.0
- fzaninotto/faker: 1.4.0
- phpunit/phpunit: 4.5.0
This package is not auto-updated.
Last update: 2024-09-17 03:50:20 UTC
README
许可
由以下人员维护
Ben Edmunds benedmunds.com
创建者
Ed Finkler coj@funkatron.com
版本 0.6.3 2022-02-21
什么是Inspekt?
Inspekt是PHP的综合过滤和验证库。
Inspekt背后的驱动原则
- 通过PHP超级全局变量访问用户输入固有的危险,因为“默认”操作是检索原始的、可能危险的数据
- 在应用程序源代码的各个地方进行的零散的、“内联”的过滤/验证太容易出错,无法有效
- 库或框架的目的是让程序员的工作更容易。除非它们是唯一的选择,否则应避免冗长和/或复杂的解决方案
Inspekt的功能
- 封装输入的'Cage'对象,要求开发人员使用提供的过滤和验证方法来访问输入数据
- 自动应用配置文件中定义的过滤
- 静态过滤和验证方法库
- 简单、清晰的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
测试骨架 - 添加了一个简单的示例,演示了从
GET
或POST
中提取数据的包装器
版本 0.3.5 - 2009-07-18
- 重构并重写了部分示例;添加了数据库转义示例
- 对
isInt
进行了一些工作,以便更好地处理 64 位整数(还有更多工作要做) - 修复了
isOneOf
中的错误,其中字符串模式未正确转换 - 删除了方法中的一些错误的可选参数
isRegex
现在正确地返回布尔值,而不是整数- 添加了缺失的 cage 方法
getROT13
、noTagsOrSpecial
、escMySQL
、escPgSQL
、escPgSQLBytea
- 添加了更多的单元测试
版本 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
首次发布