上传文件安全性>>限制名称和扩展名不够? (无法重命名或移动文件)

时间:2011-10-02 16:35:32

标签: security wordpress .htaccess file-upload upload

“最重要的保护措施是将上传的文件保存在用户无法通过直接URL直接访问的位置。这可以通过将上传的文件存储在Web根目录之外,也可以通过配置Web服务器来拒绝访问上传目录。

另一个重要的安全措施是在文件系统上存储文件时使用系统生成的文件名而不是用户提供的名称。这将防止本地文件包含攻击,并且还使用户无法进行任何类型的文件名操作“

我理解这一点,但是 - 我为Wordpress用户提供了将文件上传到图像目录的选项,所以我不能做任何这些事情。这些文件需要进入images目录,并命名为他们选择的名称。

到目前为止我正在做的事情:

1)仅允许名称带有一个扩展名的文件,扩展名必须来自受信任列表。

2)只允许在名称的第一部分使用字母数字,空格和下划线,且少于30个字符。

3)不允许上传名称为.htaccess的文件

4)仅允许管理员访问上传和使用wp nonces

5)检查mime类型

6)检查文件大小

我遇到的一些问题是:

如果我拒绝上传任何名为“.htaccess”的文件并且拒绝任何扩展名为.php的文件,那么这是否会阻止有人对嵌入了.php代码的图像文件进行上传?

据我所知,我可以使用php来复制没有恶意代码的图像,但我计划允许上传.ttf文件和.css文件。

我可以使用php扫描这些文件以获取脚本问号等。这是否可行?如果是这样我会在此之外搜索什么?

如果我只允许管理员访问并使用nonce和上述方法,那么我的代码有多安全,我应该做的其他事情是什么?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

我以为我会碰到这个 - 很难在这里找到很多反馈。

如果您彻底清除文件名,并且只将图像,文本和CSS文件列入白名单,那么会给您带来什么样的安全性。

目前,我将在目录中作为随机名称上传,清除名称,一个扩展名,列入白名单并在公共图像目录中重新保存。并且只允许wp管理员访问。

答案 1 :(得分:0)

您应该在images目录中禁用PHP执行。这样可以防止你考虑过很多潜在的问题,而不必担心错过了一些棘手的文件名构造。将php_flag engine off添加到该目录的apache配置中。

除非您出于某种原因确实需要它们,否则还应禁用.htaccess文件,至少在images目录中是这样。您可以在.htaccess文件中执行的所有操作都可以在Web服务器可以写入的任何目录之外的apache配置文件中完成。请参阅AllowOverride指令。