禁用对REST API的直接请求

时间:2014-09-24 15:18:56

标签: security rest spring-security

我正在为我们的前端私人使用做一个REST后端,他们都将在同一台服务器上。 问题是我担心安全问题,我不希望攻击者直接使用API​​,无论是通过JS还是使用其他REST客户端。

让我们以此服务为例

http://myserver:8080/something/webresources/film

这是一个允许GET,PUT,POST,DELETE的服务我希望只有前端能够使用它,否则因为任何人都可以看到客户端代码,所以很容易获得端点并开始放置或获取数据。我确实有BASIC AUTH所以他们必须注册,如果他们做错了什么我就能看到谁做了,但这并没有解决问题。

我可以实现访问控制,以便用户只能获取/更新/删除他们自己的电影,但我必须为每个REST服务(我现在已超过100)这样做,而且我可能需要实际获得其他电影

这是我的第一个公共项目,我真的输了。

2 个答案:

答案 0 :(得分:1)

您可以通过您的网络服务器来完成。我正在使用 Nginx。我有一个检查 $http_referer 的 if 语句。如果它什么都不返回,或者返回的值不是我的应用程序/前端页面(意味着有人试图直接访问 api),它将返回一个 403 禁止页面。

如果您的应用程序不向您的用户发送电子邮件,请不要担心以下情况:我添加了一个块以允许访问我的静态图像作为唯一的例外,因为我的应用程序发送带有图像的电子邮件而我不不想让它们坏掉。

就是这样。问题解决了。除了我的前端页面/应用程序,没有人可以访问我的 api。

答案 1 :(得分:0)

从服务器端调用REST API的唯一选择。您无法向用户隐藏其浏览器中发生的事情...您可以拥有分层应用程序,因此前端层可以调用服务器上的后端层,而客户端只能看到前端。 (检查分层系统约束。)