大家好,我正在使用CodeIgniter PHP 框架开发一个照片分享网站。这个想法是人们可以上传他们的照片,管理它们(通过某种文件浏览器,允许他们创建子文件夹,拖动文件等)和编辑它们(一些基本的东西,比如调整大小,旋转和裁剪开始,和稍后,我将添加一些高级功能)。
我已经为 CI 实现了第三方身份验证解决方案(Redux Authentication 2 Beta),我现在正在集成一个 JS/PHP 文件管理器(AjaxExplorer),但问题是用于管理文件的 PHP 后端(移动、复制、等)过于信任来自 ajax 调用的用户输入。例如,它正在做这样的事情(为了清楚起见进行了简化):
move_uploaded_file($_FILES['upload']['tmp_name'], $root.$username.$_POST['destination_dir']);
如您所见,存在明显的安全问题,因为它盲目地接受用户输入的任何路径!我已经看到有人发送类似“../AnotherUser/”的东西作为 $_POST['destination_dir'] 值。
我的问题是:“沙箱”用户的最佳方式是什么,以便只允许他管理自己的数据?我是否只是验证+过滤输入,希望捕捉到每一次入侵尝试?是否有专门用于解决此特定问题的库/包?
我认为这个问题必须在任何(足够成熟的)项目中以某种方式解决,它赋予用户通过网络浏览器管理文件的能力,所以我希望找到一些明确的指导方针(因为有很多关于 SQL 注入、XSS、CSRF 等),但我想我没有使用正确的关键字。