我一直在开发一个基于Symfony2(用于后端)的电子商务项目和用于前端的AngularJS。目前,Symfony部分仅用作API,它具有三个不同的用户级别(访客,客户和管理员)。可以在系统内完成的不同操作(如添加/删除数据)由以下方式保护:
1)具有用户角色/访问控制的Symfony2防火墙
2)额外的JMS安全性(@PreAuthorize表达式)
对于安全的部件,一切都按预期工作,我对工作方式非常满意。
问题:
API的某些部分是公开的(例如检索产品信息,类别等)。我在Ajular中检索此类数据,使用Ajax调用我的API,返回JSON格式的数据。一个例子是:
/ API /产品/获取-所有/页= 1&安培;计数= 10安培;排序[ID] = ASC
问题是任何人都可以在浏览器中查看请求并复制路径并访问所有数据(例如所有产品),并且可以只下载所有信息的JSON。虽然这些数据是公开的,但我并不想给别人这么简单的偷窃""我的数据。
创意&可能的解决方案:
1)我正在查看JWT(Json Web Token)标准,尝试保护对我的API的公共调用,并以这样的方式实现它,即我为"真实"生成令牌。网站上的用户,并限制直接访问公共API链接。
你怎么看?这是一个可能的解决方案吗?2)我还在阅读StackOverflow上的其他一些问题,我可以从请求中检查HTTP_X_REQUESTED_WITH标头,但是我们都知道攻击者很容易欺骗它。
3)最后,我读了一个类似的解决方案"解决方案" 1)这里:http://engineering.talis.com/articles/elegant-api-auth-angular-js/但我并不完全确定这符合我的目的。
附加说明:
感谢您抽出宝贵时间阅读我的问题,并期待任何反馈。
答案 0 :(得分:2)
您可以通过多种方式限制系统滥用,包括:
限制API在要求CAPTCHA或其他验证方法之前返回的请求总数。这可能受到IP,浏览器指纹,身份验证令牌等的限制。
通过使用GUID或其他随机生成的ID,滥用者难以猜测产品,类别等的ID。
使用API管理代理(例如Azure API Management)进行API的更多企业级管理(http://justazure.com/azure-api-management-part-one-introduction/)
答案 1 :(得分:0)
您可以尝试以下方式:
这样,每个想要窃取您的数据的人都需要通过填写验证码和更改引荐来获取匿名临时令牌。
答案 2 :(得分:0)