myClass.php
public function clearCache() {
// validate input and determine the appropriate cache folder;
...
helper::removeFolder($folder);
}
helper.php
static function removeFolder($folder) {
...
}
第一种方法执行所有输入验证,以确保我们不会删除错误的文件夹。
我想保护第二种方法免受php对象注入和未经授权的使用。
现在我正在使用此方法检查调用类名称 How to get the name of the calling class (in PHP)
我特别关注利用此类方法擦除敏感数据或整个网站的攻击者。这有点矫枉过正还是有更好的方法?
有什么想法吗?当然我只关心远程攻击,如果攻击者可以在我的服务器上放置文件并执行它,那么他们就可以自己擦除磁盘。
我正在使用Joomla,如果框架提供了这样的功能,请提及它。
答案 0 :(得分:2)
首先,我不认为"检查通话类名称"是帮助者的一个很好的功能。帮助者应该是一个通用的可重用代码片段,并补充说这个限制似乎再次出现了这个概念。
另一方面,你所尝试的是防止错过使用" removeFolder"从任何其他方法,即基本上,不可能(与eval和exec等内置函数相同的情况)。你应该在使用该函数的方法中处理验证的地方,你应该确保使用该函数的所有方法都得到了适当的保护,而不是试图锁定" removeFolder"在暗房里。
编辑:也许一个更加偏执的措施可以使方法"万无一失"并限制它删除非关键文件\文件夹。
答案 1 :(得分:1)
如果您想阻止其他人轻松访问敏感类函数,首先选择的方法是将该方法设为私有,这样它只能在您的类内部调用,您可以在其中控制它的调用方式。这对于控制函数使用方式的好处比作为安全措施更有帮助;如果某人可以运行自己的PHP脚本来调用您的类,则该站点已经被泄露。
如果你有一个用于清除Joomla缓存的removeFolder()调用,首先建议Joomla有内部缓存管理功能,参见JFactory :: getCache(“component”)和$ cache-> clean() ,它更适合管理Joomla缓存对象。如果您管理自己的存储,您可以清理该功能,以便它只相对于缓存的根目录工作,如果您想让它更安全 - 可能最大的受益者将是保护您不正确使用该呼叫。