我刚刚在我的项目中实现了uploadify,我注意到上传过程中出现了一个重要的安全问题:
应该上传文件的文件夹作为javascript参数提供,因此客户端。如果用户更改了脚本并填写了上传的其他文件夹(即“/”),则该文件会上传到其他文件夹。
配置中有一个选项可以过滤文件类型,但同样在客户端提供它(“fileExt”)。
所以我认为这可能导致可能的黑客攻击我错了吗?在Web Root中的任何地方上传php文件并执行它似乎很容易。
我确信我不是第一个想到这一点的人。哦,其他配置参数也是如此,例如 sizeLimit 和 queueSizeLimit 。
答案 0 :(得分:4)
只看代码(没有在任何地方安装它),看起来这肯定是一个安全问题。看看uploadify.php,我看到了:
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
这意味着传递“/”会将文件放在文档根目录(即您网站的主目录)中。当然,用户可以轻松(例如)传递像'../../etc'这样的文件夹参数和名为'passwd'的文件。或者,更平凡的是,他可以将“logo.jpg”上传到文档根目录,嘿,现在你已经有了色情网站徽标了!
当然,即使您对用户进行沙盒处理,仍然存在许多允许用户随意上传文件到服务器的潜在问题。如果他们上传.php文件,然后使用他们的浏览器转到该文件怎么办?他们突然有能力在你的服务器上执行任意代码!
如果你想这样做,你应该强制用户上传到受限目录(realpath函数将清理路径,以防用户使用“../ ..”或其他任何东西创建疯狂的路径),你应该限制允许的文件类型(即只限于“.jpg”,“。gif”,“。png”或其他)。即使这样,恶意用户也可以通过填写磁盘配额来管理你。
答案 1 :(得分:2)
我只是想对你的帖子发表看法。 你在分析中忘记了一件重要的事情。 开发人员必须检查服务器端脚本中的变量。 如果您使用javascript(如uploadify或您自己的脚本)或者如果您不使用javascript(只是html中的简单FORM),您必须检查服务器端脚本中的数据。所以无论你是否使用uploadify都是为了你的安全。不要忘记,很容易建立HTTP请求并将其发送到服务器。因此,Web应用程序的安全性不依赖于客户端
感谢您的关注
贵贵
答案 2 :(得分:1)
这确实是一个安全问题,路径遍历。你应该给他们发电子邮件并要求他们修复它。
答案 3 :(得分:1)
您可以使用服务器端脚本和配置将文件放在任何位置。我从不使用他们的javascript配置来做这些事情。
答案 4 :(得分:0)
我知道这是一个有点老话题,但这是来自插件开发人员的说明:
鉴于脚本语言种类繁多,服务器端验证取决于用户编码。我们正在开发插件,以允许那些知道他们正在做什么的人使用他们想要的前端和后端语言。并且创建新脚本来检索信息会使其他用户更难实现,例如那些使用aspx,java,codeigniter等的人。需要重写插件的主要部分。
您可以完整阅读here。
请记住,服务器验证是必须的!您不能忽略它。这就是我从SO和PHP手册中学到的东西。