【问题标题】:Spring Security: Securing URL and ParametersSpring Security:保护 URL 和参数
【发布时间】:2016-06-03 14:35:48
【问题描述】:

我有一个要求,应用程序需要根据用户具有的角色和传递的参数来保护用户的 URL。..

例如: 有四个角色 PREVIEW_VIEW、PREVIEW_MODIFY、PUBLIC_VIEW、PUBLIC_MODIFY

并且 URL 命中是 http://myapp:8080/console/editGroups.action?orgId=1&recipientType=PREVIEW

假设用户只有“PUBLIC_VIEW”和“PUBLIC_MODIFY”权限。

如果用户传递参数“recipientType=PREVIEW”,则只有在用户拥有“PREVIEW_MODIFY”权限时才能访问页面。

那么如何同时保护 URL 和参数呢?

即仅当用户具有 PREVIEW_MODIFY 权限时才允许此 URL(http://myapp:8080/console/editGroups.action?orgId=1&recipientType=PREVIEW) 和 仅当用户具有 PUBLIC_MODIFY 权限时才允许此 URL(http://myapp:8080/console/editGroups.action?orgId=1&recipientType=PUBLIC)

谢谢

车坛

【问题讨论】:

  • 问题太宽泛了。本质上,用户/角色应该在服务器端会话中维护。 Spring security 内置了基于角色保护资源的机制。
  • 您可以使用 HMAC 来检测 URL 篡改。不过,您最好将接收者类型保持在会话中

标签: spring security spring-mvc spring-security


【解决方案1】:

对我来说,这是错误的处理方式。根据客户的定义,URL 是可以更改的,因为是客户自己决定调用谁或调用什么。因此,URL 是放置安全信息的最糟糕的地方。此外,如果你需要走这条路,我认为你不得不利用加密。

服务器决定与客户端关联的角色,因此它强制客户端在其角色组合中包含一个参数。当然,这个必须被加密(对称加密就足够了),因为客户端绝不能以任何方式改变它。

当客户端执行请求时,服务端获取加密后的属性并解密得到客户端的角色。

如果您需要使该属性易于理解,您可以清楚地显示它并使用额外的加密 HASH 参数。

【讨论】:

  • 毫无疑问角色是在服务器端维护的。但是我正在寻找类似以下的解决方案:
猜你喜欢
  • 2014-03-07
  • 2013-11-29
  • 2020-04-11
  • 2017-12-29
  • 2016-01-12
  • 2012-12-26
  • 2012-12-11
  • 2013-06-07
  • 2014-12-17
相关资源
最近更新 更多