完整安全图像上载脚本
我不知道这是否会发生,但我会尝试一下。
过去一小时,我研究了图像上传安全性。我了解到有很多功能可以测试上传。
在我的项目中,我需要保证上传的图像。也可能有相当大的数量,并且可能需要大量带宽,因此购买API不是一种选择。
所以我决定获得一个完整的PHP脚本,用于真正的安全图像上传。我也认为这对许多人有帮助,因为找不到真正安全的人是不可能的。但我不是php的专家,所以添加一些功能对我来说真的很头疼,所以我会请求这个社区帮助来创建一个真正安全图像上传的完整脚本。
关于它的真正伟大的话题在这里(但是,它们只是告诉我们需要做什么,但不是如何做到这一点,正如我所说我不是PHP的高手,所以我无法做到这一切我自己): PHP图像上传安全检查列表https://security.stackexchange.com/questions/32852/risks-of-a-php-image-upload-form
总之,他们告诉这是安全图像上传所需要的(我将从上面的页面引用):
使用.httaccess禁止PHP在上传文件夹中运行。
如果文件名包含字符串“php”,则不允许上传。
仅允许扩展名:jpg,jpeg,gif和png。
仅允许图像文件类型。
禁止具有两种文件类型的图像。
更改图像名称。上传到子目录而不是根目录。
也:
使用GD(或Imagick)重新处理图像并保存处理后的图像。所有其他人都对黑客来说很有趣“
正如rr指出的那样,使用move_uploaded_file()进行任何上传“
顺便说一句,你想要对你的上传文件夹非常严格。那些地方是许多漏洞
发生的黑暗角落之一。这适用于任何类型的上载和任何编程
语言/服务器。检查
https://www.owasp.org/index.php/Unrestricted_File_Upload第1级:检查扩展名(扩展名文件以)结尾
第2级:检查MIME类型($ file_info = getimagesize($ _ FILES ['image_file']; $ file_mime = $ file_info ['mime'];)
级别3:读取前100个字节并检查它们是否具有以下范围内的任何字节:ASCII 0-8,12-31(十进制)。
级别4:检查标题中的幻数(文件的前10-20个字节)。你可以在这里找到一些文件头字节:http:
//en.wikipedia.org/wiki/Magic_number_%28programming%29#Examples您可能还想在$ _FILES ['my_files'] ['tmp_name']上运行“is_uploaded_file”。请参见
http://php.net/manual/en/function.is-uploaded-file.php
这是它的重要组成部分,但仍然不是全部。(如果您知道更多可能有助于使上传更安全的内容,请分享。)
这就是我们现在所做的事情
所以,我要问的是通过发布代码片段来帮助我(以及其他所有人)使这个图像上传脚本变得超级安全。或者通过共享/创建添加了所有片段的完整脚本。
隔江千里