我正在使用名为' Instafeed'的JS插件。 https://github.com/stevenschobert/instafeed.js动态提取上传到Instagram帐户的最新图片。
我的目标是让这个为政府客户服务。我首先在我自己的个人帐户中测试了它,并找到了我的用户ID,客户ID并生成了令牌。
<script type="text/javascript">
// Get the most latest instagram post and insert it into the page in the DIV# instafeed
var feed = new Instafeed({
get: 'user',
userId: '249842490',
accessToken: '249842490.1677ed0.0283e662751a4e369ae856f60a4b6228',
sortBy: 'most-recent',
resolution: 'low_resolution',
limit: 1,
clientId: 'dee7958de6a64ed284b95abb1619b790'
});
feed.run();
</script>
现在要获取客户端ID,我必须在Developers区域中创建一个应用程序。从2016年6月1日起,任何新的应用程序都将被沙盒化,并应用限制,直到审核并正确发布为止。 https://www.instagram.com/developer/limits/
一切正常并按原样拉出图片(例如https://github.com/SLQ-web/Packery-Mockup-SLQ-Homepage/blob/Ryan's-Responsive-Spec/html/widget-social.html),但我已经被PM询问了依赖关系和漏洞。我可以看到明显的依赖关系是Instagram帐户,Instagram应用程序和令牌生成器。
我打算让Instagram应用程序生效,因为500 /小时的速率限制对于页面获得的流量来说太小了。一旦Instagram应用程序生效,我的客户似乎非常关心安全性。
我无法回答的是关于谁可以使用该应用程序的安全风险?出于什么目的?有人可以利用该应用程序破解Instagram帐户吗?请注意,我正在为极端风险的客户工作。我只能假设访问该页面的用户使用那里的应用程序,我在该页面上调用应用程序来生成要显示的内容的Instafeed.js。该应用程序不适用于任何其他用途。
答案 0 :(得分:1)
每当您在客户端上嵌入信息时,您都冒着访问该客户端的任何人以某种方式获取该信息的风险。这适用于网站,原生移动应用等。
API提供商(本例中为Instagram)知道这是一种风险,这也是他们专门为您提供某种标识符组合的原因(在您的情况下为userId
,accessToken
和{ {1}})允许客户端应用程序发出请求,但监控与这些标识符相关的流量,并提供限制流量,黑名单等设施。
这些类型的凭据非常有用,因为它们通常可以重置(如果您发现来自某个来源的某些奇怪流量,您可以重置令牌并重新部署您的应用程序。)
这种类型的东西属于“API管理”领域,这些功能非常普遍。不幸的是,总是有人从客户端应用程序中获取这些密钥的风险。
如果您正在为之工作的人不希望人们获得这些凭据,您可以在客户端实施某种用户身份验证(现在最常见的方式之一是OAuth,仅作为示例),以及一旦客户端进行身份验证,他们就可以调用服务器,服务器将包含clientId
API和Instafeed
,userId
等。只需在客户端和Instagram之间添加一个额外的层,并允许您更多地控制谁从您的应用程序发出请求(它仍然无法消除将从您的客户端应用程序进行身份验证的恶意用户,但在至少它将访问点保存在一个单独的位置,这将是你的服务器。