此问题涉及在我的网站从公共聊天板中发布的外部网页链接中删除,存储和嵌入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
此网址没有扩展名,我知道即使它有扩展名,也可能是错误的,图片可能包含恶意代码,如果我上传并投放图片,我可能会暴露用户。< / p>
我目前的安全方法包括:
使用PHP的exif_imagetype()可靠地(?)检查文件类型。如果图像与PNG,JPG,GIF等不匹配,请拒绝它。
使用.htaccess锁定uploads目录,并明确禁止脚本执行
AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI
将图像存储在Web根目录之外,并使用PHP函数(例如imagecreatefromjpeg)来提供它。
限制上传目录(例如chmod 770)
鉴于我的目标(刮图像,流程,存储,嵌入),我是否遗漏了可以进一步减轻的安全漏洞?是否有可以推荐的图书馆或其他功能,以确保以这种方式提供的图像是(相对)安全的?
答案 0 :(得分:0)
如果您使用的是WordPress,则可以使用具有内置opengraph功能的Yoast SEO plugin。
参考:https://kb.yoast.com/kb/getting-open-graph-for-your-articles/