我有一个将图像上传到服务器目录的 php 脚本。但是我看到一些评论提到出于安全考虑,不应将图像上传到根目录。如果我上传到我当前上传到的目录,我不确定可能出现的安全漏洞。这是存储图像的路径。htdocs/图像/文件名.jpg。
请建议我以安全的方式存储图像的位置。
我有一个将图像上传到服务器目录的 php 脚本。但是我看到一些评论提到出于安全考虑,不应将图像上传到根目录。如果我上传到我当前上传到的目录,我不确定可能出现的安全漏洞。这是存储图像的路径。htdocs/图像/文件名.jpg。
请建议我以安全的方式存储图像的位置。
关于图片上传的安全性已经有很多话题,但首先是目录的权限644
应该做的。接下来,您需要注意名称,正如评论中建议的那样,时间戳是相当不错的方法,但是它必须与一些随机生成的值结合使用(或使用时间戳,包括毫秒),但是如果您需要给图像一个有意义的名称,您必须清理用户提供的名称,过滤掉空字节、目录遍历和其他危险字符(我会将图像名称列入白名单并限制长度,或者随机生成一个字符串)。
与其将图像放在 web 根目录之外,我更喜欢在其中使用.htaccess
with 选项php_flag engine off
来关闭目录中的任何 php 执行。此外,将图像放在 Web 根目录之外会使它们直接无法访问,因此您将无法在<img>
标记中使用它们,除非您使用 PHP 脚本来提供图像(如果实施正确,这是一种相当安全的方法)。
最后,您要检查是否正在上传有效图像,通常使用GD
库,特别是getimagesize
,仅当上传有效图像时才会返回图像大小。
另请检查有关图像上传安全性的此主题。