欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Eureka 未授權訪問漏洞修復問題小結

 更新時間:2024年04月13日 09:57:40   作者:JustDI-CM  
項目組使用的 Spring Boot 比較老,是 1.5.4.RELEASE ,最近被檢測出 Spring Eureka 未授權訪問漏洞,這篇文章主要介紹了Spring Eureka 未授權訪問漏洞修復問題小結,需要的朋友可以參考下

1. 背景

項目組使用的 Spring Boot 比較老,是 1.5.4.RELEASE 。最近被檢測出 Spring Eureka 未授權訪問漏洞。

現狀是瀏覽器直接訪問 Eureka Server 可以直接進去,看到已經注冊的服務信息。

2. 方法

2.1 Eureka Server 添加安全組件

Eureka Server 添加 pom 依賴:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

2.2 Eureka Server 添加參數

spring.application.name:demo-eureka
server.port: 8088
eureka.instance.hostname=localhost
#禁用將自己作為客戶端注冊,禁用客戶端注冊行為
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#eureka地址
eureka.client.service-url.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka
#eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka
#關閉自我保護 --本地開發(fā)環(huán)境可以關閉,生產環(huán)境
eureka.server.enable-self-preservation = false
#清理節(jié)點時間
eureka.server.eviction-interval-timer-in-ms = 60000
spring.security.basic.enabled=true
spring.security.user.name=demo
spring.security.user.password=123abcd

2.3 重啟 Eureka Server

重啟 Eureka Server ,然后刷新訪問頁面,顯示登錄框:

輸入配置的用戶名和密碼。

spring.security.user.name=demo
spring.security.user.password=123abcd

然后就報錯了:Reason: Bad credentials。

奇怪,明明是按照配置文件里面輸入的,怎么還會報用戶名或密碼錯誤呢。

查了一些資料,說跟 security 加密方法有關,整了半天搞不定。

2.4 Eureka Server 升級版本

實在沒招了,只能懷疑用的框架版本太低,去重新整一個,eureka 就用了個服務發(fā)現,問題不大。

訪問:https://start.spring.io/

把項目下載到本地,依賴已經加好了:

<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>

在啟動類上加上注解:

package com.demo.cloudeurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class CloudEurekaServerApplication {
	public static void main(String[] args) {
		SpringApplication.run(CloudEurekaServerApplication.class, args);
	}
}

再把 2.2 的參數加到 properties 文件中(最好換個 server.port),然后 run 啟動類,訪問 eureka ,輸入用戶名和密碼,進去了:

2.5 Eureka Client 配置

eureka client 參數:

eureka.client.enabled=true
eureka.client.eureka-server-port=8089
eureka.client.service-url.defaultZone=http://demo:123abcd@localhost:8089/eureka/

啟動 eureka client,報錯:

javax.ws.rs.WebApplicationException: null
	at com.netflix.discovery.provider.DiscoveryJerseyProvider.readFrom(DiscoveryJerseyProvider.java:110)
	at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:634)
	at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:586)
	at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.sendHeartBeat(AbstractJerseyEurekaHttpClient.java:105)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
	at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
	at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118)
	at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
	at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
	at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
	at com.netflix.discovery.DiscoveryClient.renew(DiscoveryClient.java:824)
	at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1388)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
2023-11-03 14:41:26.339  WARN [test-app-service,,,] 16240 --- [tbeatExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClient    : Request execution failed with message: null
2023-11-03 14:41:26.339 ERROR [test-app-service,,,] 16240 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_TEST-APP-SERVICE/10.136.44.122:test-app-service:60000 - was unable to send heartbeat!
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
	at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:111)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
	at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
	at com.netflix.discovery.DiscoveryClient.renew(DiscoveryClient.java:824)
	at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1388)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

刷新 eureka 頁面,也沒有服務信息,服務注冊失敗了。

這是因為從 Spring Boot 2.0 開始,默認情況下會啟用CSRF保護,以防止CSRF攻擊應用程序,導致服務注冊失敗。

2.6 Eureka Server 添加代碼

修改 Eureka Server :

package com.demo.cloudeurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableEurekaServer
@SpringBootApplication
public class CloudEurekaServerApplication {
	public static void main(String[] args) {
		SpringApplication.run(CloudEurekaServerApplication.class, args);
	}
	/**
	 * springboot 從 2.0 開始,默認情況下會啟用CSRF保護
	 * 需要關閉
	 */
	@EnableWebSecurity
	static class WebSecurityConfig extends WebSecurityConfigurerAdapter {
		@Override
		protected void configure(HttpSecurity http) throws Exception {
			//方法1:關閉csrf
//			http.csrf().disable();
			//方法2:忽略/eureka/** 所有請求
			http.csrf().ignoringAntMatchers("/eureka/**");
			super.configure(http);
		}
	}
}

重啟 Eureka Server 和 Eureka Client ,這次沒有報錯,刷新頁面,重新登錄后,看到注冊的服務信息:

2.7 其他問題

在 Spring Security 5.7.0-M2 中,WebSecurityConfigurerAdapter 被棄用了,Spring 鼓勵用戶轉向基于組件的安全配置。這意味著,現在應該使用基于組件的安全配置來配置 HttpSecurity,而不是繼承 WebSecurityConfigurerAdapter。這種方式更加靈活,可以更好地支持 Spring Boot 2.x 和 Spring 5.x。

我試了幾個方法,沒有替換掉,靠你了,耿小姐。

到此這篇關于Spring Eureka 未授權訪問漏洞修復問題小結的文章就介紹到這了,更多相關Spring Eureka 漏洞修復內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • javaweb 國際化:DateFormat,NumberFormat,MessageFormat,ResourceBundle的使用

    javaweb 國際化:DateFormat,NumberFormat,MessageFormat,ResourceBu

    本文主要介紹javaWEB國際化的知識,這里整理了詳細的資料及實現代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • 解讀RabbitMQ和kafka的相同點和不同點是什么

    解讀RabbitMQ和kafka的相同點和不同點是什么

    RabbitMQ和Kafka都是消息中間件,支持分布式系統(tǒng)、高可用性和可靠性,RabbitMQ使用隊列模型,適合復雜路由場景;Kafka使用主題-分區(qū)模型,適合大規(guī)模數據流處理,RabbitMQ在低延遲方面表現更好,Kafka在高吞吐量方面表現更好
    2024-12-12
  • Java多線程 Guarded Suspension設計模式

    Java多線程 Guarded Suspension設計模式

    這篇文章主要介紹了Java多線程 Guarded Suspension設計模式,Guarded Suspension意為保護暫停,其核心思想是僅當服務進程準備好時,才提供服務,文章圍繞Java多線程 Guarded Suspension展開內容,需要的朋友可以參考一下
    2021-10-10
  • 5分鐘搞定java單例模式

    5分鐘搞定java單例模式

    單例模式(Singleton?Pattern)是?Java?中最簡單的設計模式之一。這種類型的設計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式,本文給大家介紹下java單例模式的相關知識,感興趣的朋友一起看看吧
    2022-03-03
  • 簡介Java的Spring框架的體系結構以及安裝配置

    簡介Java的Spring框架的體系結構以及安裝配置

    這篇文章主要介紹了Java的Spring框架的體系結構以及安裝配置,Spring框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • Java:String.split()特殊字符處理操作

    Java:String.split()特殊字符處理操作

    這篇文章主要介紹了Java:String.split()特殊字符處理操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringCloud Gateway鑒權和跨域解決方案

    SpringCloud Gateway鑒權和跨域解決方案

    網關是介于客戶端和服務器端之間的中間層,所有的外部請求都會先經過 網關這一層,也就是說,API 的實現方面更多的考慮業(yè)務邏輯,而安全、性能、監(jiān)控可以交由 網關來做,這樣既提高業(yè)務靈活性又不缺安全性,本文給大家介紹SpringCloud Gateway鑒權和跨域解決方案,一起看看吧
    2023-11-11
  • Java設計模式中的裝飾器模式簡析

    Java設計模式中的裝飾器模式簡析

    這篇文章主要介紹了Java設計模式中的裝飾器模式簡析,裝飾模式能夠實現動態(tài)的為對象添加功能,是從一個對象外部來給對象添加功能,通常給對象添加功能,要么直接修改對象添加相應的功能,要么派生對應的子類來擴展,抑或是使用對象組合的方式,需要的朋友可以參考下
    2023-12-12
  • Java實現彩色圖片轉換為灰度圖片的示例代碼

    Java實現彩色圖片轉換為灰度圖片的示例代碼

    將彩色圖片轉換為灰度圖片是圖像處理中的常見操作,通常用于簡化圖像、增強對比度、或者進行后續(xù)的圖像分析,本項目的目標是通過Java實現將彩色圖片轉換為灰度圖片,需要的朋友可以參考下
    2025-02-02
  • 解決springboot application.yml變灰色的問題

    解決springboot application.yml變灰色的問題

    這篇文章主要介紹了解決springboot application.yml變灰色的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論