2015-07-21 121 views
6

我一直在构建Symfony2(用于后端)和AngularJS用于前端的电子商务项目。目前Symfony部分仅用作API,其具有三个不同的用户级别(来宾,客户&admin)。可以在系统内进行(如添加/移除数据)不同的动作被固定:Symfony2 REST风格的API + AngularJS

1)Symfony2的与用户角色/访问控制
2)防火墙JMS安全额外(@PreAuthorize表达式)

对于安全的部件,一切都按预期工作,我对工作方式非常满意。

问题:

有其是公共的(像检索产品信息,类别等)的API的一部分。我在Angular中用Ajax调用我的API来检索这些数据,该API返回JSON格式的数据。一个例子是:

/API /产品/ GET-所有/页= 1 &数= 10 &排序[ID] = ASC

的问题是,任何人都可以看在浏览器中请求并复制路径并访问所有数据(如所有产品),并可以下载所有信息的JSON。虽然这些数据是“公开的”,但我不想给别人这样一个“偷”我的数据的简单方法。

理念&可能的解决方案:

1)我一直在寻找在JWT(JSON网络令牌)的标准,试图确保市民来电到我的API和我产生了这样的方式实现它用于网站上的“真实”用户的令牌,并且这种限制直接访问公共API链接。

您认为如何?这会是一个可能的解决方案吗?

2)我也在阅读关于StackOverflow的其他一些问题,我可以从请求中检查HTTP_X_REQUESTED_WITH标头,但我们都知道这可能很容易被攻击者欺骗。 3)最后,我读了类似的方法来解决方案1)在这里:http://engineering.talis.com/articles/elegant-api-auth-angular-js/,但我不完全确定这符合我的目的。

其他注意事项:

  • 我不想让这个防弹的,但我也不想给人们点击2个按钮,让我的所有数据的选项。我知道最终所有的信息都可以被“偷走”(例如,通过使用网络刮板),但是“保护”系统使得人们不得不做出一点努力是我的想法。
  • 我真的不能再模型我的API在这个阶段太多,但任何想法,将不胜感激

感谢您抽出宝贵的时间来阅读我的问题,我期待着任何反馈。

+0

Azure的API管理你不能真正保障公众的数据,因为你_want_公众能够看到这些数据。你可以尝试让所有数据变得更加困难,但这就是全部。只要接受公共数据是公开的,并且将您的权力投资于更好,更有生产力的东西。 – smat88dd

回答

2

你可以限制你的系统的滥用在许多方面,其中包括:

  • 限制API将需要CAPTCHA或其他一些前返回请求总数验证方法。这可能受到IP,浏览器指纹,身份验证令牌等的限制。

  • 使滥用者难以通过使用GUID或其他随机生成的ID来猜测产品,类别等的ID。

  • 使用API​​管理代理,如为这些API的更多企业级管理(http://justazure.com/azure-api-management-part-one-introduction/

0

你可以尝试这样的:

  1. 访问该网站,匿名用户首先需要填写验证码来获得临时令牌。
  2. 添加推荐人检查。
  3. 匿名用户可查看的数据量有限。例如,前50个产品。

这样,每个想要窃取数据的人都需要通过填写验证码并更改引用来获取匿名临时令牌。