所以我注意到像Tinder这样的应用程序可以显示Instagram连接,即用户A在其他人的手机上,甚至不需要其他用户实际登录Instagram。
例如:User-A连接instagram并获取访问令牌。用户-B,C,D ......可以看到A& A& amp;私人照片甚至没有登录Instagram。
有没有办法在不需要访问令牌的情况下查看其他用户的Instagram - 即使是使用CLIENT_ID的私有图片?
答案 0 :(得分:4)
让我们不要混淆。 Tinder用户可以选择加入Instagram照片。 Tinder无法在全球范围内访问Instagram照片。我将从安全角度回答您,因为我从未尝试使用Instagram连接设置Tinder帐户来为您测试场景。实际上,根据我对Instagram APIs的理解,可能无法获得用户的隐私图片。但我可能是错的,所以让我继续讨论。
访问令牌嵌入在Tinder应用程序代码中,如果您根据混淆程度对代码进行反编译,您可能会发现它,如果使用mitmproxy
等软件,几乎可以肯定。我不会在这里讨论这样的做法。
因此,Tinder客户端被授予访问用户图片的令牌。
用户选择在Tinder / Instagram上访问他的私人照片。单个访问令牌适用于选择加入Instagram的所有用户的图片。如果您窃取了Tinder的令牌,您可以访问任何Tinder-Instagram用户的私人照片。那不错。用户已选择与世界分享私人照片。但如果Instagram用户不是Tinder用户,请确保您没有得到任何东西
请注意,令牌对Tinder应用程序有效,不是用户A的令牌。安全措施禁止这样做。
通过将您的Tinder帐户与Instagram相关联,您授予 Tinder的已发行令牌,以代表您访问您的照片
汇总:
注意:Tinder客户端可能或可能不使用Instagram发布的令牌。从一般安全角度来看,有两种实施方案:
答案 1 :(得分:-1)
如果您想快速解决问题,我会在处理公开数据时不惜一切代价避免使用OAuth 。我会编写一个curl脚本来从用户的配置文件URL中获取公共Instagram数据,并解析HTML服务器端(或客户端)。
这是PHP中的一个快速模型示例,使用file_get_contents
和DOMDocument
:
//HTTP GET someone's profile (the easy way):
$html = file_get_contents('https://www.instagram.com/profile_xxxxxx/');
//Use PHP's built-in HTML parser
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->loadHTML($html);
$selector = new DOMXPath($doc);
//Instagram stores image URL's in meta tag "og:image"
foreach($selector->query('//attribute::*[contains(., \'og:image\')]') as $e) {
//Store profile photo from DOMNode $e
$photourl = $e->getAttribute('content');
//Grab profile photo
file_get_contents($photourl);
}
答案 2 :(得分:-2)
让我们考虑像ISS页面这样的Instagram用户个人资料页面可以在线使用而无需任何身份验证访问:
https://www.instagram.com/iss/
由于Instagram的运作方式,此处只会显示公开图片(以及帖子,帖子,关注者)。
所以你要做的就是获取页面数据。要做到这一点,你可以使用像PhantomJS这样的几个解决方案,就像写
一样var page = require('webpage').create();
page.open('https://www.instagram.com/iss/', function() {
var contents=page.contents; // here is the page contents
phantom.exit();
});
因此,假设您可以在服务器端执行此过程,您可以在api响应中将这些公共配置文件图像作为JSON对象提供。当然它比这更复杂一点(即你必须等待页面资源在PhantomJS
内加载,但最后网络刮刀可以临时保存页面并将其转换为json结构,<img/>
源图像等已准备好在应用中显示。