加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何保护PHP图像上载脚本免受攻击?

发布时间:2020-12-13 18:04:26 所属栏目:PHP教程 来源:网络整理
导读:我创建了(使用 a script和Stack的一些帮助以及朋友的帮助;我对PHP知之甚少)一个简单的页面,用于本地非营利性出版物,人们可以上传照片. 我对安全性不是很好(基于无知,而不是故意的疏忽),但我采取了以下步骤来保护这个页面: ?PHP脚本设置为仅接受.jpg,.png和.
我创建了(使用 a script和Stack的一些帮助以及朋友的帮助;我对PHP知之甚少)一个简单的页面,用于本地非营利性出版物,人们可以上传照片.

我对安全性不是很好(基于无知,而不是故意的疏忽),但我采取了以下步骤来保护这个页面:

?PHP脚本设置为仅接受.jpg,.png和.tif文件进行上传;
?保存表单内容的子文件夹具有设置为700的权限,并且保存上传照片的子文件夹具有设置为700的权限;
?根据文档,我的主机具有以下配置,以确保只有.php文件作为.php运行:

<FilesMatch .php$>
    SetHandler php52-fcgi
</FilesMatch>

?我在相关(主要和保存的内容)文件夹中放置了.htaccess文件:

RemoveHandler .php
RemoveHandler .inc
RemoveHandler .pl
RemoveHandler .cgi
RemoveHandler .py
RemoveHandler .fcgi

然而,一夜之间,有人找到了这个测试页面,并提交了一个看起来非常良性的测试信息和小.jpg.这是一个私人测试页面,其中包含一个非直观的URL,只有我和其他三个人都知道;其他人都没有发过这个测试.

这显然让我担心会发生一些变态,我担心我对安全性的了解不足以确保这个页面是安全的.

有什么明显的东西让我失踪吗?

在处理上传时,您应该记住,您可以在$_FILES数组中找到的所有数据都是伪造的.它正在通过HTTP传播,因此很容易将image / jpg mime提供给可执行文件.

1-检查真正的哑剧

PHP附带了一些功能来检查文件的真实mime.为此你应该使用fileinfo

$finfo = new finfo(FILEINFO_MIME,"/usr/share/misc/magic");
$filename = "/var/tmp/afile.jpg";
echo $finfo->file($filename);

2-检查图像的属性

您显然只想上传图片,因此收到的文件必须有宽度和高度:

使用getImageSize()获取有关图像的所有必需信息.如果返回false,则该文件可能不是图像,您可以将其删除.
getImageSize也可以给你一个mime类型,但我不知道它是否可以信任.

2.5-重新处理图像

正如user628405所建议的那样,用GD重新处理图像可能是更安全的事情.

$img = imagecreatefrompng('vulnerable.png'); 
imagepng($img,'safe.png');

显然它必须根据图像类型进行调整.在php文档中查看所有imagecreatefrom *.

3-上传文件夹
除了你已经做过的事情:

确保您的上传文件夹不在网上.验证上载的文件,然后根据需要将其移动到其他文件夹并重命名该文件.
它将阻止黑客执行恶意文件(如果网址无法访问,则无法执行).

进一步阅读:https://www.owasp.org/index.php/Unrestricted_File_Upload

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读