是否可以使用随机令牌保护 json api 抓取?
Posted
技术标签:
【中文标题】是否可以使用随机令牌保护 json api 抓取?【英文标题】:Is it possible to protect json api scraping using random tokens? 【发布时间】:2014-01-02 15:20:45 【问题描述】:我使用 Laravel 为在线商店构建了一个 restful json api。
我现在希望创建一个 AngularJS 应用程序来运行前端 Web 应用程序。我的商店的产品价格需要每秒更新一次,因此 Angular 需要每秒从服务器获取一次产品 json 以更新 html。
我希望以某种方式保护这些 json 数据不被抓取工具/机器人重复访问我的 api 以窃取我的产品和定价数据。
我的想法:
每个 json api 响应都包含一个随机的一次性令牌(我知道做一些事情来阻止冲突)。
这个随机令牌通过 AngularJS 注入到 html 页面中的隐藏字段中。 Angularjs 在重新请求 api 之前读取隐藏的令牌,并在下一个 get 请求的标头中使用它。
仅在标头中提供正确标记的 json 响应。一旦使用令牌,它就会过期,并且任何重新使用过期令牌的尝试都会导致该 IP 地址被锁定一段时间或标记为管理员进行调查。
有没有更好的方法来完成上述操作?我的问题有什么实际可用的解决方案吗?考虑到我首先要为产品定价提要付费,我真的不希望一些笨蛋仅仅因为我暴露了一个 api 而从我这里免费获得它!
【问题讨论】:
您还需要限制代币分发的速率。 啊,我可以在 10 分钟后过期令牌吗?这样一个新令牌的有效期为 10m,因此,我的数据库服务器不会在精神上创建和管理令牌? 这并不能阻止攻击者在每次调用后获取一个新令牌。 您是否考虑过让数据只对登录用户可用?然后,您可以跟踪和限制用户令牌,而不是拥有一个可能被泄露的集中式应用令牌? @r3mus - 该应用程序是一个在线商店。为什么用户要登录查看产品价格? 【参考方案1】:我想说一个更简单的解决方案是向您的 api 添加签名并将密钥存储在您的 Angular 应用程序中。这是一个很好的资源,过去曾帮助过我:
http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
这里还有一个(可能)相关的 SO 答案:REST api authenication with laravel
【讨论】:
以上是关于是否可以使用随机令牌保护 json api 抓取?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以通过我的逻辑使用 oauth 协议来创建 clientid 并生成访问令牌来保护 api?
我可以有两个 Spring Security 配置类:一个使用基本身份验证保护一些 API,另一个使用 JWT 令牌保护 API?