Luc*_*Luc 6 facebook facebook-fql facebook-graph-api
当我从Facebook请求照片时,一些网址是这样的:
https://{hidden_for_privacy}79141548_n.jpg
Run Code Online (Sandbox Code Playgroud)
其他人是这样的:
https://{hidden_for_privacy}23364315_n.jpg?oh=c566c56ca9fd7eb1ed5d8bfca4255e84&oe=544AF123&__gda__=1414682395_6d2cb778f5b2c857d1be1c781e81cdfa
Run Code Online (Sandbox Code Playgroud)
第二个有一些额外的GET参数(哦,oe和__gda_ _(空格是为了防止加粗).
当存在这些参数时,图像将在几天后无效,因为这些值将不同(您可以通过执行新的API调用来检查这一点以获取相同的照片).
这些参数意味着什么以及它们如何与最大时间框架相关联?
谢谢!
Cur*_*Sam 11
我知道一些历史和目的.
最初的facebook图片网址看起来像这样的
https:// {*snipped*} /XXXXXXXXXXX_b.jpg
但是有超过图像大小的可用,所以人们可以访问缩略图,只需用_n替换后缀_b
(现在它是https :// {*snipped*} /XXXXXXXXXXX_n.jpg)
访问更大版本的图像(如果可用).
一段时间后,facebook实现了中央图像系统,可以根据请求动态裁剪和调整图像大小.
facebook在这个时间点提供的网址可能如下所示:
https:// {*snipped*} .fbcdn.net/hprofile-xxx1/v/t1.0-1/p32x32/12345678_123412341234123_4123412341234123412_n.jpg
当人们看到他们的好奇心出现了.
让我们尝试从网址中删除一些参数.
https:// {*snipped*} .fbcdn.net/hprofile-xxx1/v/12345678_123412341234123_4123412341234123412_n.jpg
他们得到的是他们可以从Facebook服务器获得的最大和最完整的图像版本.
这种方法工作了很长时间.
当人们在他们的电子邮件中看到图像(主要是个人资料图片)时,他们可以获得完整版本的图像,甚至无需登录Facebook
它到处工作包括私人资料图片.
Facebook的快速修复和最便宜的解决方案是使用一些签名算法签署请求路径.
我猜他们使用HMAC作为核心算法,并从各种来源(包括请求路径)派生HMAC输入.
这将确保唯一可以生成有效URL的一方是拥有HMAC密钥的一方.(大概只是脸书)
现在旧问题已修复,您不能再使用它了,但有一个以上的问题可以通过添加MAC来修复.
它是对图像访问的无效.
让我们说人们曾经发布他们的照片(现在其他人可以同时拥有有效的请求路径和来自Facebook的签名签名),之后他们会改变主意并将照片设为私有.
但是,具有有效网址和签名的人仍然可以从Facebook服务器获取图像.
用超低价资源解决这个问题,认为它们已经实现了HMAC计算.
(并且当你删除它时,Facebook实际上并没有从你的系统中删除你的图像.)
他们决定将从时间戳得到的值混合到HMAC的输入中.
(有关类似用法,请参阅RFC-6238)
因此,定期从Facebook进行签名刷新以获取对照片的访问权限.
这解决了后一个问题,非常便宜的额外资源.
在这里你有它.
facebook的参数背后的一些历史和基本原理.
我确定没有关于时间范围的官方文件,但是你自己认为现在你知道你想要的时间框架的价值是固定的和可预测的,你应该不难做一些实验.
我找到了答案(终于)。关键是这些照片并未公开。如果您通过 API 请求私人照片,它们会添加一个查询字符串,以便该 url 一段时间后不再有效。因此这张照片还是有些“私密”的。该功能是可以理解的,除了将图像下载到其他地方之外没有其他解决方法。
归档时间: |
|
查看次数: |
3646 次 |
最近记录: |