我已经开始为我的rest控制器实现Spring Security 。背景安全性设计是带有Spring Security 的JWT令牌。
我一直致力于实现WebSecurityConfigurerAdapter。
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/managers/**").hasRole("MANAGER_USER)
.anyRequest().authenticated()
.and().cors();
httpSecurity.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}
我的问题是关于的基本认识:当从Angular调用rest控制器端点时,我有rest调用,其中包括管理器ID,当进行调用时,服务器返回管理器的用户列表。
安全工作正常,只有具有MANAGER_USER角色的用户才能访问该方法,否则返回403。理论上,Angular可以发送具有不同管理器ID的请求,并检索不属于他的用户。在postman中,您可以轻松更改ID并检索不同的结果,但是否存在有人攻击Angular应用程序以发送不同ID的风险?如果是,找不到解决办法吗?
例如,一些URL在URL中包含ID,因此用户实际上可以更改URL中的ID。
1条答案
按热度按时间whhtz7ly1#
就像你解释的那样,任何人都可以通过 Postman 、浏览器等发送http请求。所以是的,前端框架也可以修改为发送自定义请求--但我相信这不是真正的问题所在。前端的一切都是不安全的,应该被认为是不安全的。我们在前端增加的安全层基本上是为了防止普通用户做我们不想做的事情。一个聪明的人会发现端点并弄清楚你的系统是如何工作的,不管你把前端安全设置得有多好。永远不要相信前端。
如果要避免角色为
MANAGER_USER
的已验证人员只查询仅属于他们的“用户”,则需要提高安全性或重新配置查询用户的方式。对于后者,这可能是数据库的设置方式。将
manager_id
与每个user
相关联,并使端点/GET/users
只返回属于进行查询的管理员的用户。(不知道端点或id的实际值是什么,我只是用上面的端点作为例子)。