保护我的网站免受评论中包含 php 的上传文件的最佳方法是什么?
我的网站允许上传图片,目前只能上传有效图片,但有效图片仍然可以在评论中写代码。有没有办法检查图像的评论?还是我唯一的选择是从所有元数据中删除图像?如果我从元数据中删除我的图像,那会产生什么后果?
剥离元数据非常容易(常见的 GD 扩展):
$img = imagecreatefromjpeg("uploaded_img.jpg");
imagejpeg($img, "stripped_img.jpg", 100);
imagedestroy($img);
事实上,没有什么好担心的(如果你不执行里面的代码——我真的非常怀疑)。
Quentin 部分正确地说,如果你的配置是正确的,那么 PHP 解释器不应该解析这些图像——但最好不要依赖单一的防线。
在许多司法管辖区,从数字或其他内容中删除版权信息是(正确地)非法(或至少违反合同)。因此,故意剥离元数据可能会给您带来很多麻烦。
如果是我,我会:
1) 确保我的配置不允许在没有 PHP 解释器运行指定扩展的情况下进行任何操作
2) 确保我的应用程序不允许重命名上传内容的扩展名
3) 对图像应用一些变换(旋转/缩放/更改格式)以消除它可能包含的一些恶意软件(例如 CVE-2013-1331),保留 exif 数据
4) 将内容保留在文档根目录之外并通过代理脚本控制访问
5) 转义 exif 数据中出现的任何 php 开始和结束标记
您可以获得他们添加的评论并在其上运行“addslashes”方法。
http://php.net/manual/en/function.addslashes.php
这样就不会有跨站脚本或代码注入的风险。