最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring-Security對(duì)HTTP相應(yīng)頭的安全支持方式

 更新時(shí)間:2022年10月27日 08:55:12   作者:盲目的拾荒者  
這篇文章主要介紹了Spring-Security對(duì)HTTP相應(yīng)頭的安全支持方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Spring Security支持在響應(yīng)中添加各種安全頭

默認(rèn)相應(yīng)安全頭:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

雖然這些頭文件都被認(rèn)為是最佳實(shí)踐,但應(yīng)該注意的是,并不是所有的客戶機(jī)都使用了header。

基于Java的配置如下:

@EnableWebSecurity
public class WebSecurityConfig extends
?? ??? ?WebSecurityConfigurerAdapter {
?
?? ?@Override
?? ?protected void configure(HttpSecurity http) throws Exception {
?? ??? ?http
?? ??? ??? ?// ...
?? ??? ??? ?.headers()
?? ??? ??? ??? ?.frameOptions().sameOrigin()
?? ??? ??? ??? ?.httpStrictTransportSecurity().disable();
?? ?}
}

public class WebSecurityConfig extends
?? ??? ?WebSecurityConfigurerAdapter {

?? ?@Override
?? ?protected void configure(HttpSecurity http) throws Exception {
?? ??? ?http
?? ??? ??? ?// ...
?? ??? ??? ?.headers()
?? ??? ??? ??? ?.frameOptions().sameOrigin()
?? ??? ??? ??? ?.httpStrictTransportSecurity().disable();
?? ?}
}

如果不想用默認(rèn)值可禁用,添加顯示要用的響應(yīng)安全頭

@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {
?
@Override
protected void configure(HttpSecurity http) throws Exception {
?? ?http
?? ?// ...
?? ?.headers()
?? ??? ?//除非明確列出,否則不要使用任何默認(rèn)標(biāo)題。
?? ??? ?.defaultsDisabled()
?? ??? ?.cacheControl();
}
}

public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
?? ?http
?? ?// ...
?? ?.headers()
?? ??? ?//除非明確列出,否則不要使用任何默認(rèn)標(biāo)題。
?? ??? ?.defaultsDisabled()
?? ??? ?.cacheControl();
}
}

如果有必要,你可以禁用所有的HTTP安全響應(yīng)頭

@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {
?
@Override
protected void configure(HttpSecurity http) throws Exception {
?? ?http
?? ?// ...
?? ?.headers().disable();
}
}

public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
?? ?http
?? ?// ...
?? ?.headers().disable();
}
}

在過去的Spring Security中,您需要為您的web應(yīng)用程序提供自己的緩存控制。這在當(dāng)時(shí)似乎是合理的,但是瀏覽器緩存已經(jīng)進(jìn)化到包含安全連接的緩存。

這意味著用戶可以查看經(jīng)過身份驗(yàn)證的頁面,注銷,然后惡意用戶就可以使用瀏覽器歷史來查看緩存頁面。

為了幫助減輕這個(gè)Spring安全性,已經(jīng)添加了緩存控制支持,它將在您的響應(yīng)中插入以下頭部。

禁用其他安全頭,啟用緩存安全頭:

@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {
?
@Override
protected void configure(HttpSecurity http) throws Exception {
?? ?http
?? ?// ...
?? ?.headers()
?? ??? ?.defaultsDisabled()
?? ??? ?.cacheControl();
}
}

public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
?? ?http
?? ?// ...
?? ?.headers()
?? ??? ?.defaultsDisabled()
?? ??? ?.cacheControl();
}
}

如果你真的想要緩存特定的反應(yīng),您的應(yīng)用程序可以選擇性地調(diào)用 HttpServletResponse.setHeader(String,String) 覆蓋頭部Spring Security的設(shè)置。

為了保證CSS,JavaScript之類的東西是用的并且圖像正確緩存。

@EnableWebMvc
public class WebMvcConfiguration implements WebMvcConfigurer {
?
?? ?@Override
?? ?public void addResourceHandlers(ResourceHandlerRegistry registry) {
?? ??? ?registry
?? ??? ??? ?.addResourceHandler("/resources/**")
?? ??? ??? ?.addResourceLocations("/resources/")
?? ??? ??? ?.setCachePeriod(31556926);
?? ?}
?
?? ?// ...
}

public class WebMvcConfiguration implements WebMvcConfigurer {

?? ?@Override
?? ?public void addResourceHandlers(ResourceHandlerRegistry registry) {
?? ??? ?registry
?? ??? ??? ?.addResourceHandler("/resources/**")
?? ??? ??? ?.addResourceLocations("/resources/")
?? ??? ??? ?.setCachePeriod(31556926);
?? ?}

?? ?// ...
}

內(nèi)容類型選項(xiàng)

歷史上的瀏覽器,包括Internet Explorer,試圖想請求的內(nèi)容類型使用 content sniffing。這就使得瀏覽器通過猜測來改善用戶體驗(yàn)的內(nèi)容類型沒有指定內(nèi)容類型的資源。

例如,如果一個(gè)瀏覽器遇到一個(gè)JavaScript文件,該文件沒有指定的內(nèi)容類型,它會(huì)猜內(nèi)容類型,然后執(zhí)行它。

content sniffing的問題是,這允許惡意用戶使用polyglots(即一個(gè)文件,是作為多種內(nèi)容類型有效)來執(zhí)行XSS攻擊。

例如,某些網(wǎng)站可能會(huì)允許用戶提交一個(gè)有效的PostScript文檔到網(wǎng)站,并查看它。惡意用戶可能會(huì)創(chuàng)建一個(gè) postscript文件,這也是一個(gè)有效的JavaScript文件 并用它執(zhí)行XSS攻擊

通過添加以下content sniffing可以禁用我們的響應(yīng)頭

X-Content-Type-Options: nosniff

HTTP Strict Transport Security (HSTS)

當(dāng)你輸入你的銀行的網(wǎng)站,你輸入mybank.example.com 或者你輸入 https://mybank.example.com 如果您省略https協(xié)議,你可能容易受到 中間人攻擊。即使網(wǎng)站執(zhí)行重定向到 https://mybank.example.com 惡意用戶能夠攔截最初的HTTP請求和操作響應(yīng)(即重定向到 https://mibank.example.com 和竊取他們的憑證)。

許多用戶忽略了https協(xié)議,這就是為什么要?jiǎng)?chuàng)建HTTP嚴(yán)格傳輸安全性(HSTS)的原因。一旦mybank.example.com被添加為HSTS主機(jī),瀏覽器就可以提前知道對(duì)mybank的任何請求。example.com應(yīng)該被解釋為https://mybank.example.com。這大大減少了發(fā)生中間攻擊的可能性。

將站點(diǎn)標(biāo)記為HSTS主機(jī)的一種方法是將主機(jī)預(yù)加載到瀏覽器中。另一種是將"Strict-Transport-Security"頭添加到響應(yīng)。例如,以下將指示瀏覽器把域作為一年的HSTS主機(jī)(一年有大約31536000秒):

Strict-Transport-Security: max-age=31536000 ; includeSubDomains

可選includeSubDomains指令指示Spring安全子域(即secure.mybank.example.com)也應(yīng)該被視為一個(gè) HSTS域。

只啟用HSTS在Java Configuration:

@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {
?
@Override
protected void configure(HttpSecurity http) throws Exception {
?? ?http
?? ?// ...
?? ?.headers()
?? ??? ?.httpStrictTransportSecurity()
?? ??? ??? ?.includeSubdomains(true)
?? ??? ??? ?.maxAgeSeconds(31536000);
}
}

public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
?? ?http
?? ?// ...
?? ?.headers()
?? ??? ?.httpStrictTransportSecurity()
?? ??? ??? ?.includeSubdomains(true)
?? ??? ??? ?.maxAgeSeconds(31536000);
}
}

X-Frame-Options

允許給你的網(wǎng)站添加框架可能存在安全問題。例如,使用巧妙的CSS樣式用戶可能會(huì)被欺騙點(diǎn)擊的東西,他們不打算 (video demo)。

例如,登錄到他們的銀行用戶可能會(huì)點(diǎn)擊一個(gè)按鈕授予其他用戶訪問。這種攻擊被稱為 Clickjacking.

有很多方法可以減輕點(diǎn)擊劫持攻擊。例如,為了保護(hù)傳統(tǒng)瀏覽器不受clickjacking攻擊,您可以使用框架破壞代碼。雖然不完美,但是框架破壞代碼是您為遺留瀏覽器所能做的最好的事情。

解決點(diǎn)擊劫持更先進(jìn)的方法是使用 X-Frame-Options 頭:

X-Frame-Options: DENY

X-Frame-Options指示瀏覽器阻止在響應(yīng)中在框架內(nèi)呈現(xiàn)的任何站點(diǎn)。默認(rèn)情況下,Spring Security在iframe中禁用呈現(xiàn)。

你可以定制X-Frame-Options和 frame-options 元素。 例如,以下將指示Spring Security用 "X-Frame-Options: SAMEORIGIN" 允許iframes在同一個(gè)域:

@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {
?
@Override
protected void configure(HttpSecurity http) throws Exception {
?? ?http
?? ?// ...
?? ?.headers()
?? ??? ?.frameOptions()
?? ??? ??? ?.sameOrigin();
}
}

public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
?? ?http
?? ?// ...
?? ?.headers()
?? ??? ?.frameOptions()
?? ??? ??? ?.sameOrigin();
}
}

X-XSS-Protection

一些瀏覽器支持過濾掉反射的XSS攻擊。這絕不是萬無一失的,但確實(shí)有助于XSS的保護(hù)。

默認(rèn)情況下,過濾通常是啟用的,因此添加header通常只會(huì)確保啟用它,并指示瀏覽器在檢測到XSS攻擊時(shí)要做什么。

例如,過濾器可能試圖以最小的入侵方式改變內(nèi)容,以使所有內(nèi)容都呈現(xiàn)出來。有時(shí),這種類型的替換本身就會(huì)成為XSS的弱點(diǎn)。相反,最好是屏蔽內(nèi)容,而不是試圖修復(fù)它。為此,我們可以添加以下header:

<span style="color:#333333">X-XSS-Protection: 1; mode=block</span>

自定義java配置XSS保護(hù)

<span style="color:#333333"><em><span style="color:#808080">@EnableWebSecurity</span></em>
<strong>public</strong> <strong>class</strong> WebSecurityConfig <strong>extends</strong>
WebSecurityConfigurerAdapter {
?
<em><span style="color:#808080">@Override</span></em>
<strong>protected</strong> <strong>void</strong> configure(HttpSecurity http) <strong>throws</strong> Exception {
?? ?http
?? ?<em>// ...</em>
?? ?.headers()
?? ??? ?.xssProtection()
?? ??? ??? ?.block(false);
}
}</span>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot自動(dòng)裝配的原理與使用

    SpringBoot自動(dòng)裝配的原理與使用

    在現(xiàn)代的軟件開發(fā)中,依賴管理是一個(gè)關(guān)鍵的任務(wù),隨著應(yīng)用程序規(guī)模的增長,手動(dòng)管理對(duì)象之間的依賴關(guān)系變得越來越復(fù)雜,為了解決這個(gè)問題,Spring Boot提供了一種強(qiáng)大的功能,即自動(dòng)裝配,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • Java?JDK的多版本共存實(shí)現(xiàn)方法

    Java?JDK的多版本共存實(shí)現(xiàn)方法

    有時(shí)候系統(tǒng)中需要多個(gè)jdk版本共存,我們在做特定的操作時(shí)需要特定的版本,這篇文章主要給大家介紹了關(guān)于Java?JDK的多版本共存實(shí)現(xiàn)?的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • java、spring、springboot中整合Redis的詳細(xì)講解

    java、spring、springboot中整合Redis的詳細(xì)講解

    這篇文章主要介紹了java、spring、springboot中整合Redis的詳細(xì)講解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 解決SpringBoot掃描不到公共類的實(shí)體問題

    解決SpringBoot掃描不到公共類的實(shí)體問題

    這篇文章主要介紹了解決SpringBoot掃描不到公共類的實(shí)體問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Springboot項(xiàng)目中實(shí)現(xiàn)微信小程序登錄案例(最新推薦)

    Springboot項(xiàng)目中實(shí)現(xiàn)微信小程序登錄案例(最新推薦)

    文章介紹了如何通過微信開放平臺(tái)的授權(quán)登錄功能實(shí)現(xiàn)Spring Boot項(xiàng)目與微信小程序的微信登錄,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-02-02
  • 利用Java工具類Hutool實(shí)現(xiàn)驗(yàn)證碼校驗(yàn)功能

    利用Java工具類Hutool實(shí)現(xiàn)驗(yàn)證碼校驗(yàn)功能

    這篇文章主要介紹了利用Java工具類Hutool實(shí)現(xiàn)驗(yàn)證碼校驗(yàn)功能,利用Hutool實(shí)現(xiàn)驗(yàn)證碼校驗(yàn),校驗(yàn)的Servlet與今天的第一篇是一樣的,唯一就是驗(yàn)證碼的生成是不一樣的,利用Hutool生成驗(yàn)證碼更快捷.需要的朋友可以參考下
    2022-10-10
  • Java樹形菜單的創(chuàng)建

    Java樹形菜單的創(chuàng)建

    這篇文章主要為大家詳細(xì)介紹了Java圖形用戶界面中樹形菜單的創(chuàng)建樹形菜單的創(chuàng)建,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-10-10
  • Java多線程編程之使用Exchanger數(shù)據(jù)交換實(shí)例

    Java多線程編程之使用Exchanger數(shù)據(jù)交換實(shí)例

    這篇文章主要介紹了Java多線程編程之使用Exchanger數(shù)據(jù)交換實(shí)例,本文直接給出實(shí)例代碼,需要的朋友可以參考下
    2015-05-05
  • 十分鐘速懂java知識(shí)點(diǎn) System類

    十分鐘速懂java知識(shí)點(diǎn) System類

    這篇文章主要介紹了java知識(shí)點(diǎn)System類,根據(jù)一次面試總結(jié)的,可以十分鐘速懂System類,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Java詳細(xì)講解不同版本的接口語法和抽象類與接口的區(qū)別

    Java詳細(xì)講解不同版本的接口語法和抽象類與接口的區(qū)別

    對(duì)于面向?qū)ο缶幊虂碚f,抽象是它的一大特征之一,在?Java?中可以通過兩種形式來體現(xiàn)OOP的抽象:接口和抽象類,下面這篇文章主要給大家介紹了關(guān)于Java入門基礎(chǔ)之抽象類與接口的相關(guān)資料,需要的朋友可以參考下
    2022-04-04

最新評(píng)論

湘潭市| 乌兰浩特市| 腾冲县| 绿春县| 和静县| 清徐县| 若尔盖县| 安远县| 蕲春县| 阳春市| 徐汇区| 安远县| 信宜市| 清徐县| 西乌珠穆沁旗| 通河县| 华宁县| 手游| 公主岭市| 永修县| 临洮县| 磴口县| 安仁县| 浦北县| 谢通门县| 化德县| 图木舒克市| 溧水县| 镇江市| 玛纳斯县| 和田市| 冕宁县| 浏阳市| 土默特右旗| 沾化县| 伊川县| 灵台县| 汝城县| 仲巴县| 吉首市| 南京市|