Spring Security是spring提供的一个安全框架,他可以用来保护很多东西,这里说一下他在springcloud中担任的角色
在springcloud中,Security同样担任着安全的重要角色,这里使用它对Eureka注册中心中心进行保护(这里只是举例,并不是说Spring Security只能对注册中心进行保护)
可能有人会有疑惑,注册中心只是担任着一个类似于仓库的角色,并没有具体的逻辑,他有什么安全隐患呢?
他的安全隐患就是注册,注册有什么隐患?我来演示一下。
把之前的代码复制一下
我们把f1的接口修改一下,添加一个登陆接口
如下所示
然后我们在在Ribbon负载均衡器里面同样添加上登录接口,让他继续担任我们的负载均衡的角色,如下所示
我们依次启动Eureka===Ribbon===f1三个项目,然后访问接口
就这么一个简单的接口,我来攻击一下
我们把f2项目当做是攻击的项目,把他改改,加上登录接口
这里postlogin担任着网络转发的功能,将账号和密码转发到正确的服务器,让正确的服务器去校验账号和密码是否合法
我们现在把他注册到服务注册中心
我们多登录几次没,然后看看
这样我们就拿到了用户的账号和密码,而且不管是服务器还是用户都不会感觉到异常
(>_<)
(>_<)
(>_<)
下面我们来对注册中心进行安全保护,加入Security安全框架
首先先引入Security依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
修改配置文件
name:安全账号
password:安全密码,
我们在添加一个配置文件,代码如下
package org.eureka.demo;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
/**
* 配置安全信息
* - 禁用csrf攻击功能
* - 开启所有请求需要验证并且使用http basic进行认证
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf()
.disable()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
如果你了解Spring Security那么对这个
安全配置类SecurityConfiguration
的内容不陌生,在SecurityConfiguration 的configure
方法内,禁用了csrf
功能并且开启所有请求都需要通过basic
方式进行验证。
重启项目,我们在访问http://127.0.0.1:8002
我们发现需要输入账号和密码,并不能如同之前那样直接看到注册中心页面,我们输入刚才配置文件里面的账号密码登录一下
同样的,这个时候我们在注册就需要账号密码了,我们启动f2攻击项目看看
无法获取请求,服务器拒绝了我们的注册,然后我们在修改正常的项目Ribbon负载均衡和我们的f1逻辑项目,加上账号和密码
我们再次启动负载均衡和f1项目
可以看到这个时候我们就注册成功了,但是我们的攻击项目并不能注册上去,我们在登录一下
这样的话我们的注册中心就受到了很好的保护
因为账号和密码是由我们的后台发送的,所以安全性还是很高的
当然,如果你要是有防火墙之类的硬件,注册中心的服务器只运行白名单访问的话那一般不存在安全隐患,有没有验证都无所谓
o(*≧▽≦)ツ┏━┓
o(*≧▽≦)ツ┏━┓
o(*≧▽≦)ツ┏━┓