在 PHP 中保护一个危险的静态方法
Protect a dangerous static method in PHP
myClass.php
public function clearCache() {
// validate input and determine the appropriate cache folder;
...
helper::removeFolder($folder);
}
helper.php
static function removeFolder($folder) {
...
}
第一种方法执行所有输入验证以确保我们没有删除错误的文件夹。
我想保护第二种方法免受 php 对象注入和未经授权的使用。
现在我正在使用这个检查调用 class 名称
How to get the name of the calling class (in PHP)
我特别担心攻击者利用这种方法擦除敏感数据或整个网站。这是矫枉过正还是有更好的方法?
有什么想法吗?当然我只关心远程攻击,如果攻击者可以在我的服务器上放置一个文件并执行它,那么他们就可以自己擦除磁盘。
我正在使用Joomla,如果框架提供了这样的功能,请注明。
首先,我认为 "checking the calling class names" 不是帮助者的好功能。助手应该是一段通用的可重用代码,添加该限制似乎违背了这个概念。
另一方面,您正在尝试的是防止从任何其他方法中误用 "removeFolder",这基本上是不可能的(同样的情况发生在 eval 和 exec 等内置函数中) .您应该在使用该函数的方法中注意验证的地方,您应该确保使用该函数的所有方法都得到适当保护,而不是试图将 "removeFolder" 锁定在暗室中。
编辑:也许更偏执的措施可以使方法 "foolproof" 并将其限制为删除非关键 files\folders.
如果你想防止其他人轻易访问敏感的 class 函数,第一个选择是将方法设为私有,这样它只能在你的 class 内部调用,你可以控制它的调用方式。与作为安全措施相比,这更有利于您控制函数的使用方式。如果有人可以 运行 自己的 PHP 脚本来调用您的 class,则该站点已经受到威胁。
如果您有一个用于清除 Joomla 缓存的 removeFolder() 调用,第一个建议是 Joomla 具有内部缓存管理功能,请参阅 JFactory::getCache("component") 和 $cache- >clean(),更适合管理 Joomla 缓存对象。如果您管理自己的存储,则可以清理该函数,以便它仅在您想让它更安全时相对于缓存的根目录起作用——可能最大的受益者是防止您自己不正确地使用调用。
myClass.php
public function clearCache() {
// validate input and determine the appropriate cache folder;
...
helper::removeFolder($folder);
}
helper.php
static function removeFolder($folder) {
...
}
第一种方法执行所有输入验证以确保我们没有删除错误的文件夹。
我想保护第二种方法免受 php 对象注入和未经授权的使用。
现在我正在使用这个检查调用 class 名称 How to get the name of the calling class (in PHP)
我特别担心攻击者利用这种方法擦除敏感数据或整个网站。这是矫枉过正还是有更好的方法?
有什么想法吗?当然我只关心远程攻击,如果攻击者可以在我的服务器上放置一个文件并执行它,那么他们就可以自己擦除磁盘。
我正在使用Joomla,如果框架提供了这样的功能,请注明。
首先,我认为 "checking the calling class names" 不是帮助者的好功能。助手应该是一段通用的可重用代码,添加该限制似乎违背了这个概念。
另一方面,您正在尝试的是防止从任何其他方法中误用 "removeFolder",这基本上是不可能的(同样的情况发生在 eval 和 exec 等内置函数中) .您应该在使用该函数的方法中注意验证的地方,您应该确保使用该函数的所有方法都得到适当保护,而不是试图将 "removeFolder" 锁定在暗室中。
编辑:也许更偏执的措施可以使方法 "foolproof" 并将其限制为删除非关键 files\folders.
如果你想防止其他人轻易访问敏感的 class 函数,第一个选择是将方法设为私有,这样它只能在你的 class 内部调用,你可以控制它的调用方式。与作为安全措施相比,这更有利于您控制函数的使用方式。如果有人可以 运行 自己的 PHP 脚本来调用您的 class,则该站点已经受到威胁。
如果您有一个用于清除 Joomla 缓存的 removeFolder() 调用,第一个建议是 Joomla 具有内部缓存管理功能,请参阅 JFactory::getCache("component") 和 $cache- >clean(),更适合管理 Joomla 缓存对象。如果您管理自己的存储,则可以清理该函数,以便它仅在您想让它更安全时相对于缓存的根目录起作用——可能最大的受益者是防止您自己不正确地使用调用。