【发布时间】:2016-11-13 09:10:06
【问题描述】:
这个问题与保护我的系统和保护我的用户有关,当我的网站抓取、存储和嵌入从公共聊天板中发布的外部网页链接抓取的 Open Graph 图片时。
我有一个聊天论坛应用程序 (Apache/PHP/WordPress),用户可以在其中发布指向外部页面的链接,并且我想安全地存储和嵌入打开的图形图像、标题、描述,类似于 Facebook 的做法当您发布链接时。
Facebook 通过抓取 Open Graph 数据并将图像的本地版本存储在自己的服务器上来做到这一点,这可能是为了持久性和性能。我还想在本地存储 OG 图像,这样我就可以调整大小和压缩它,并保留它以供将来使用。
使用 GitHub 上的 Open Graph Protocol helper for PHP,我的抓取工作非常出色。
但我关心的一个例子在 GitHub 源代码本身的示例中得到了展示——它从烂番茄中拉出一个页面,并且 OG 图像具有这种格式:
https://resizing.flixster.com/Er0hIAp55dpRWn5HQTrPc1f2hZE=/740x290/v1.bjs5NzU2NjtqOzE3MDExOzEyMDA7MTEyMDs4NDA
此 URL 上没有扩展名,我知道即使它有扩展名,这也可能是错误的,并且如果我上传和提供图片,该图片可能包含恶意代码,我可能会将我的用户暴露给我。
我目前的安全措施包括:
使用 PHP 的 exif_imagetype() 可靠地(?)检查文件类型。如果图片与 PNG、JPG、GIF 等不匹配,请拒绝。
-
使用 .htaccess 锁定上传目录,并明确禁止脚本执行
AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi Options -ExecCGI 将图像存储在 Web 根目录之外,并使用 PHP 函数(例如 imagecreatefromjpeg)提供服务。
限制上传目录(例如 chmod 770)
鉴于我的目标(抓取图像、处理、存储、嵌入),我是否遗漏了任何可以进一步缓解的安全漏洞?您是否可以推荐一个库或其他功能来确保以这种方式提供的图像(相对)安全?
【问题讨论】:
-
“图像可能包含恶意代码,如果我上传和提供图像,我可能会暴露我的用户” - 我相当怀疑调整大小是否能幸免。 (也许在 EXIF 元数据中,所以你可能想要清理/删除它。)
-
@CBroe 是一个很好的解决方案,但 this discussion 关于在调整大小后幸存下来的 PNG 让我很吃惊。您是否认为该漏洞利用太遥远,或者现在已记录在案,是一个可预测的向量?
-
我天真的预感是:最好关注这类漏洞的更大元素,即:它们依赖于本地文件包含或其他一些形式的意外执行漏洞,无论如何都应该修复,一般来说(无论媒体文件类型如何),如果这样做了,被黑的图像应该不再是真正的威胁,作为副产品。
标签: php wordpress .htaccess security facebook-opengraph