【发布时间】:2015-04-10 08:34:59
【问题描述】:
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,如果框架提供了这些功能,请注明。
【问题讨论】:
-
某人如何将对象注入 PHP,您是在 eval()ing/反序列化用户输入还是提取变量或其他东西?无论如何都是坏主意
-
以@simontemplar 所说的为基础,如果有人可以从您的代码远程运行一个函数,那么您将遇到更大的问题。
-
这是 Joomla 的扩展。这不是我关心的代码(因为我已采取一切可能的步骤来确保它是安全的),但那里有成千上万的扩展,我经常看到未经验证的输入。这会导致严重的漏洞,我不想成为让攻击者有机会造成更大破坏的人。
-
removeFolder可能包括对unlink的调用或类似的调用。现在,如果有人足够聪明,可以向removeFolder发送不受信任的输入,他们也可以直接对unlink执行相同的操作——您无法阻止,也不应该在意。保护文件系统的真正方法是使用适当的权限,这样 Web 进程就无法访问不应修改的数据。 -
问题不在于你是否偏执,而在于你是否足够偏执。我是否应该推断出我已经够偏执了?