"最重要的保护措施是将上传的文件保存在用户无法通过直接URL直接访问的地方。这可以通过将上传的文件存储在web根目录之外或配置web服务器拒绝访问上传目录来实现。
另一个重要的安全措施是在文件系统上存储文件时使用系统生成的文件名,而不是用户提供的文件名。这将防止本地文件包含攻击,也使用户无法进行任何类型的文件名操作"
我明白这一点,然而-我提供选项Wordpress用户上传文件到他们的图像目录,所以我不能做这些错误。这些文件需要放到images目录中,并以自己选择的名称命名。
到目前为止我所做的是:
1)只允许有一个扩展名的文件,并且扩展名必须来自可信列表。
2)只允许字母、数字、空格和下划线出现在名称的第一部分,且长度不超过30个字符。
3)不允许上传。htaccess文件
4)只允许管理员访问上传并使用wp nonce
5)检查mime类型6)检查文件大小
我的一些问题是:
如果我拒绝上传任何名为'。Htaccess '和我拒绝任何文件与。php扩展名,这不应该阻止有人上传与。php代码嵌入图像文件?
我知道我可以使用php来复制没有恶意代码的图像,但是我计划允许上传。ttf文件和。css文件。
我可以用php扫描这些文件的脚本问号等。这样合适吗?如果是这样,我还要寻找什么呢?
如果我只允许管理员访问并使用nonce和上述方法,我的代码有多安全?我应该做的其他事情有多安全?
任何帮助都非常感谢!
我想我应该碰一下这个——在这里很难找到很多反馈。
如果你对文件名进行了彻底的清理,并且只将图像、文本和css文件列入白名单,那么这会给你带来什么样的安全性呢?
目前,我上传作为一个目录中的随机名称,擦洗名称,一个扩展名,白名单和重新保存在一个公共图像目录。
您应该在images目录中禁用PHP执行。这样可以避免许多您已经考虑过的潜在问题,而不必担心错过一些棘手的文件名构造。将php_flag engine off
添加到该目录的apache配置。
除非出于某种原因您确实需要它们,否则您还应该禁用.htaccess文件,至少在images目录中禁用。可以在。htaccess文件中完成的所有操作都可以在web服务器可写的任何目录之外的apache配置文件中完成。