1)具有用户角色/访问控制的Symfony2防火墙
2)额外的JMS安全性(@PreAuthorize表达式)
对于安全的部件,一切都按预期工作,我对工作方式非常满意.
问题:
API的某些部分是公开的(例如检索产品信息,类别等).我正在使用Ajax调用我的API检索Angular中的此类数据,该API调用JSON格式的数据.一个例子是:
/api/product/get-all/?page=1&count=10&sorting[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/但我并不完全确定这符合我的目的.
补充说明:
>我不想让这个防弹,但我也不想让人们选择点击2个按钮并获取我的所有数据.我知道最终所有信息都可能被“窃取”(例如:通过使用网络剪贴板),但是“保护”系统的方式是人们必须做出一点努力才是我的想法.
>在这个阶段,我无法真正重新模拟我的API,但任何想法都会受到赞赏
感谢您抽出宝贵时间阅读我的问题,我期待着您的反馈.
>限制API在要求CAPTCHA或其他验证方法之前返回的请求总数.这可能受到IP,浏览器指纹,身份验证令牌等的限制.
>通过使用GUID或其他随机生成的ID,滥用者难以猜测产品,类别等的ID.
>使用API管理代理(如Azure API Management)实现API的更多企业级管理(http://justazure.com/azure-api-management-part-one-introduction/)