【问题标题】:REST API security - how to secure it instead of sessionidREST API 安全性 - 如何保护它而不是 sessionid
【发布时间】:2016-09-22 12:54:46
【问题描述】:

我有一个关于我的简单 REST API 应用程序的安全性的问题。 我实施了安全检查,并在每次尝试从/在数据库中读取/更新数据时(这是一个简单的 HttpSession session= request.getSession(true); 并检查 - 这是一个新会话还是旧会话,以及它是否等于会话 ID来自cookies)。

但问题是——即使这是一个有效的用户和有效的会话——我得到了一个让用户忽略其他用户的 URL:

http://localhost:8080/ChatRest/rest/FriendService/ignoreFriend/1/2

我可以更改 2 个用户 ID(最后 2 个数字)并发送相同的请求以使其他系统用户忽略其他人,例如:http://localhost:8080/ChatRest/rest/FriendService/ignoreFriend/3/4

我该如何解决这个问题? 我搜索了很多(例如 - RESTful Authentication 和相关文章,包括安全问题)。但是解决这个问题的最简单方法是什么?我是一个初学者,所以我很乐意找到最简单的解决方案。

谢谢!

【问题讨论】:

  • 以防万一,我还阅读了stackoverflow.com/questions/7238094/… 文章和其他文章,但它们对我来说很难实现和理解......或者没有那么简单的方法可以解决我的问题

标签: java rest security session


【解决方案1】:

只要用户不共享相同的凭据,任何身份验证机制都允许您处理此问题。即使使用Basic AUTH,您也可以确定谁通过了身份验证。

如果登录用户是id=1,那么他可以执行http://localhost:8080/ChatRest/rest/FriendService/ignoreFriend/1/2,但他不能忽略任何其他id的人。事实上,既然你从数据库中获取了用户id,你甚至不需要第一个参数。应该是ignoreFriend/2,意思是“我想忽略我作为参数提供的 id 的人”。

【讨论】:

  • 是的,概念很棒。谢谢!只是为了澄清 - 在服务器端存储此用户 id 的最佳方式是什么?因为如果我使用 localhost:8080/ChatRest/rest/FriendService/ignoreFriend/2 我应该从某个地方获取我的 id。还是有一个简单的全局变量就足够了?
  • 数据库将是存储持久数据的标准机制。
  • 所以,我需要存储会话 id 和 id 之间的链接,并基于会话 id - 通过查询每次调用 REST 方法来获取此 id?
  • 我看不出您需要会话的任何理由。您是如何实现身份验证的?
  • 我现在正在验证登录名和密码。我打算生成会话ID并将会话ID和ID放入数据库。然后,我将能够根据每个 sql 语句中的会话 id 获取 id。
猜你喜欢
  • 2018-12-02
  • 1970-01-01
  • 2019-08-21
  • 2015-09-08
  • 2016-10-07
  • 2019-04-02
  • 2021-05-16
  • 2014-04-23
  • 2012-06-16
相关资源
最近更新 更多