mootly/mp_secure
MoosePlum 安全对象类
Requires
- php: >=8.0.0
- mootly/mp_errors: *
README
这是MoosePlum使用的对象锁定类的独立版本,供那些希望有一种非常简单且一致的方法来保护对象中的数据的人使用。
使用时,需要在类定义中添加对安全对象类的调用,并让它处理所有属性锁定/解锁。这些属性应该是私有的,并且只能通过该类的方法访问。
警告
这**不是一个安全的解决方案。
它旨在通过标记已设置的属性为锁定来减少大型项目中的编码错误。
它所做的只是让您能够将事物标记为锁定,从而不再进行编辑。任何使用它的代码仍然需要检查并尊重这个锁定。
- 已锁定的属性和方法可以再次解锁。
- 已安全化的属性和方法不能。
它使用一个注册字符串数组进行跟踪,因此可以用来锁定任何可以调用类实例以传递字符串或测试值的对象。它被编写为包含在其他类中以标准化锁定,但也可以用于任何目的。
除了实例化,它期望一个错误处理对象,以及secure4prod
(它不接受任何参数),所有方法都期望一个字符串。
警告
这**不是一个健壮的解决方案。
买家需谨慎。
除了它是免费的,所以也许更像是“赠品”的警告?
系统需求
需求很简单。
- 这是在PHP 8.1 & 8.2上开发的。它应该在PHP 7.0及以上版本中工作,但**没有**进行向后兼容性测试。
- 一个Web服务器,否则还有什么意义呢?
依赖
默认值
此类的命名空间为mpc
。
此类定义的位置应该是您的供应商库。对于与其他MoosePlum内容的集成,应该是/_lib/mootly/mp_secure/
。
资源
本套件中的文件如下
安装
手动安装
将此类定义和任何依赖项放入您的供应商库。对于与其他MoosePlum内容的集成,应该是/_lib/mootly/mp_secure/
。
使用您首选的方法将类包含到您的代码中。
Composer安装
此类定义已在Packagist上列出,可使用Composer进行安装。
有关如何在您的系统上正确安装Composer的说明,请参阅Composer网站。
Composer安装完成后并运行,请将以下代码添加到网站根目录下的composer.json
文件中。
确保以下内容列为必需。根据需要调整版本号。请参阅此类定义中的composer.json
以获取此版本包的依赖项所需版本。
"require": { "php": ">=8.0.0", "mootly/mp_errors": "*", "mootly/mp_secure": "*" }
如果您的配置需要,请确保以下自动加载定义列在您的composer.json
中。根据需要调整路径的第一个步骤以匹配您供应商库的位置。
"autoload": { "classmap": [ "_lib/mootly/mp_errors", "_lib/mootly/mp_secure" ] }
在您选择的终端中,导航到网站根目录,并运行以下命令。(根据您如何安装composer,这可能不同。)
composer update
这将在此供应商库中安装此类定义和相关依赖项,并设置composer以将它们链接到您的应用程序。
为了安全起见,您还可以运行以下命令以重建composer自动加载器并确保您的类被正确注册。
composer dump-autoload -o
在使用本类定义之前,请确保在您的页面或应用程序初始化代码中包含以下行。根据您的供应商库位置进行相应调整。
require_once "<site root>/<vendor lib>/autoload.php;"
完成以上步骤后,您应该就可以启动并运行了。
配置
本类定义有一个依赖项需要在它之前调用:mootly\mpc_errors
。
如果您正在使用自动加载,并且遵循MoosePlum命名约定,实例化的推荐方法如下
if (!isset($mpo_errors)) { $mpo_errors = new \mpc\mpc_errors(); } if (!isset($mpo_secure)) { $mpo_secure = new \mpc\mpc_secure($mpo_errors); }
建议您创建一个单独的类实例,并将其作为依赖项加载到您的其他对象中,就像上面使用mpc_errors
实例所做的那样。
用法
强烈建议您使用命名空间或其他唯一标识符来创建用于锁定的唯一字符串。
示例
- mpo_parts::main_body
- mpo_menus::main_nav::home_link
自动生成示例
get_class().'::'.someProp
get_class().'::'.__METHOD__
get_class().'_'.self::$iCount++
(用于多个实例)
为了安全起见,为给定的类中所有调用始终使用的一种类型的散列添加一个散列。这可以防止没有访问私有属性的他人覆盖任何锁。PHP散列生成器的示例
md5(get_class())
md5(rand())
uniqid()
bin2hex(random_bytes(16))
由于这些散列只会在PHP生成并发送HTTP响应的过程中持续,因此它们不需要过于安全。在散列消失之前,只有毫秒级的时间来猜测散列。
MoosePlum类在实例化时定义以下属性以确保唯一名称。
$this->classRef = bin2hex(random_bytes(8)).'::'.get_class();
方法
checklock
传递给定的属性或方法的唯一标识符,以检查它是否被锁定。
- 对于被锁定的属性或方法,返回字符串'locked'。
- 对于被保护(secured)的属性或方法,返回字符串'secured'。
- 否则返回false。
public checklock(string) : string|bool
listlock
生成所有被锁定的元素的列表。
如果没有被锁定的元素,则返回false。
如果您锁定此方法,它将只提供以提供的字符串开头的匹配项。
如果您保护此方法,它将始终返回false。
public listlock(string) : array|bool
listsecure
生成所有被保护(secured)的元素的列表。
如果没有被保护的元素,则返回false。
如果您锁定此方法,它将只提供以提供的字符串开头的匹配项。
如果您保护此方法,它将始终返回false。
public securelock(string) : array|bool
lock
锁定一个元素以防止进一步的更新。
它需要一个字符串,该字符串是元素的唯一标识符。
public lock(string) : bool
unlock
解锁一个被锁定的元素。
它需要一个字符串,该字符串是被解锁元素的唯一标识符。
被保护的元素不能被解锁。
public lock(string) : bool
secure
保护一个元素以防止进一步的更新。
它需要一个字符串,该字符串是被保护元素的唯一标识符。
被保护的元素不能被解锁。
public secure(string) : bool
secure4prod
保护此类,使listlock()
和listsecure()
无法使用。
它不接受任何参数。
不应在生产环境中使用由此方法锁定的任何方法。这两个方法都可以允许类访问彼此的锁设置。
public secure4prod() : bool