亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解spring security安全防護(hù)

 更新時(shí)間:2018年07月26日 10:22:42   作者:haofengpingjieli  
這篇文章主要介紹了詳解spring security安全防護(hù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

前言

xss攻擊(跨站腳本攻擊):攻擊者在頁(yè)面里插入惡意腳本代碼,用戶(hù)瀏覽該頁(yè)面時(shí),腳本代碼就會(huì)執(zhí)行,達(dá)到攻擊者的目的。原理就是:攻擊者對(duì)含有漏洞的服務(wù)器注入惡意代碼,引誘用戶(hù)瀏覽受到攻擊的服務(wù)器,并打開(kāi)相關(guān)頁(yè)面,執(zhí)行惡意代碼。
xss攻擊方式:一、反射性攻擊,腳本代碼作為url參數(shù)提交給服務(wù)器,服務(wù)器解析執(zhí)行后,將腳本代碼返回給瀏覽器,最后瀏覽器解析執(zhí)行攻擊代碼;二、存儲(chǔ)性攻擊,和發(fā)射性攻擊的區(qū)別是,腳本代碼存儲(chǔ)在服務(wù)器,下次在請(qǐng)求時(shí),不用再提交腳本代碼。其中一個(gè)示例圖如下所示:

CSRF攻擊:跨站請(qǐng)求偽造攻擊,CSRF是一種欺騙受害者提交惡意請(qǐng)求的攻擊,并劫持受害者的身份和特權(quán),并以受害者的身份訪問(wèn)未授權(quán)的信息和功能。序列圖如下所示:

同步器Token

解決XSS攻擊和CSRF攻擊的一個(gè)推薦方法就是同步器Token,就是在post的請(qǐng)求中,增加一個(gè)token,每次請(qǐng)求到來(lái),服務(wù)器都會(huì)驗(yàn)證請(qǐng)求中的token和服務(wù)器期望的值是否一致,如果不一致,服務(wù)器將請(qǐng)求視為非法的,整個(gè)過(guò)程的示例圖如下所示:

在spring security中如果使用的是 @EnableWebMvcSecurity而不是@EnableWebSecurity,同步器Token是默認(rèn)打開(kāi)的,通過(guò)http().csrf().disable()可以關(guān)閉同步器token功能。spring security發(fā)現(xiàn)token無(wú)效后,會(huì)返回一個(gè)403的訪問(wèn)拒絕,不過(guò)可以通過(guò)配置AccessDeniedHandler類(lèi)處理InvalidCsrfTokenException異常來(lái)定制行為。

spring security雖然默認(rèn)是打開(kāi)同步器token保護(hù)的,但是也提供了一個(gè)顯示打開(kāi)的行為即http().csrf(),同時(shí)需要在html的form表單中添加以“<input type="hidden"name="${_csrf.parameterName}" value="${_csrf.token}"/>”

如果請(qǐng)求的是json或ajax請(qǐng)求,如何使用同步器token防護(hù)那?
json請(qǐng)求的話,我們可以在header的元數(shù)據(jù)中添加token防護(hù),代碼如下所示:

<head>
<meta name="_csrf" content="${_csrf.token}"/>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}"/>
...
</head>

ajax請(qǐng)求的話,可是使用如下代碼:

$(function () {
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$(document).ajaxSend(function(e, xhr, options) {
xhr.setRequestHeader(header, token);
});
});

Synchronizer Token的常見(jiàn)問(wèn)題

1.超時(shí)
因?yàn)閠oken是存儲(chǔ)在httpsession中的,所以token存在超時(shí)的問(wèn)題,一旦超時(shí),則配置的accessDeniedHandler將接受一個(gè)異常,或者spring security直接拒絕訪問(wèn);
2.登錄
為了防止偽造的登錄請(qǐng)求,在登錄的form中也需要添加token,而token又是存儲(chǔ)在HttpSession中,也就是說(shuō)一旦發(fā)現(xiàn)token屬性,就會(huì)創(chuàng)建一個(gè)HttpSession,這和無(wú)狀態(tài)架構(gòu)模式可能會(huì)產(chǎn)生一些沖突;
3.注銷(xiāo)
添加CSRF將更新LogoutFilter過(guò)濾器,使其只使用HTTP POST。這確保了注銷(xiāo)需要一個(gè)CSRF令牌,并且惡意用戶(hù)不能強(qiáng)制注銷(xiāo)您的用戶(hù)。也就是說(shuō),注銷(xiāo)不再是一個(gè)get請(qǐng)求,而是一個(gè)post請(qǐng)求;

spring security支持的安全response header

spring security 支持的response header 包括:Cache-Control,Content-type options,HTTP Strict Transport Security,X-Frame-Options,X-XSS-Protection 如果你使用的是WebSecurityConfigurerAdapter 配置方式,則這些頭都是默認(rèn)支持的,你可以通過(guò)調(diào)用 http.header().disable()關(guān)閉這些缺省的頭。當(dāng)然你也可以單獨(dú)配置,但是如果你單獨(dú)配置的話,只有你配置的頭會(huì)起作用,其他的頭都不再默認(rèn)支持了。下面分別來(lái)討論一下這些響應(yīng)header的含義;

Cache-Control

如果不加任何控制,瀏覽器通常會(huì)緩存你的認(rèn)證相關(guān)信息,這在一定程度上會(huì)造成你的信息泄露,因此在默認(rèn)情況下,spring security會(huì)在響應(yīng)頭里加入緩存控制如下所示:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0

當(dāng)然你也可以通過(guò) http.header().cacheControl()方法單獨(dú)打開(kāi)緩存控制,你也可以通過(guò)HttpServletResponse.setHeader(String,String)方法對(duì)特殊的響應(yīng)做處理,從而確保css js 圖片能夠合適地被緩存,在spring mvc中,可以通過(guò)配置進(jìn)行設(shè)置,下面的代碼對(duì)所有的資源都增加了緩存:

@EnableWebMvc
public class WebMvcConfiguration
   extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(
    ResourceHandlerRegistry registry) {
    registry
    .addResourceHandler("/resources/**")
    .addResourceLocations("/resources/")
    .setCachePeriod(3_155_6926);
    }
// ...
}

Content-type Options

歷史上很多很多瀏覽器都能可以通過(guò)對(duì)請(qǐng)求類(lèi)型的content進(jìn)行嗅探,猜測(cè)請(qǐng)求類(lèi)型,從而提高用戶(hù)體驗(yàn),但是這會(huì)帶來(lái)XSS攻擊。例如有些站點(diǎn)允許用戶(hù)向其提交有效的postScript腳本,并查看他。惡意用戶(hù)可能提交一個(gè)有效的js文件,并使用它執(zhí)行XSS攻擊。spring security默認(rèn)是禁止進(jìn)行嗅探的。

HTTP Strict Transport Security

當(dāng)你訪問(wèn)一個(gè)站點(diǎn)是,例如www.baidu.com,省略了https協(xié)議,潛在的你會(huì)受到中間人攻擊,為了減少這種情況,就是告知瀏覽器,當(dāng)你輸入某個(gè)地址時(shí),應(yīng)該使用https協(xié)議。如何讓瀏覽器該host是一個(gè)hsts站點(diǎn)那?其中一種方法就是,增加Strict-Transport-Security 到響應(yīng)頭中,如下例所示:

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

上述例子告知瀏覽器,該站點(diǎn)在一年內(nèi)訪問(wèn)都使用https協(xié)議,includeSubDomains說(shuō)明該站點(diǎn)的子域名也使用https協(xié)議訪問(wèn)。

X-frame-optiont

X-Frame-Options HTTP 響應(yīng)頭是用來(lái)給瀏覽器指示允許一個(gè)頁(yè)面可否在 <frame>, <iframe> 或者 <object> 中展現(xiàn)的標(biāo)記。網(wǎng)站可以使用此功能,來(lái)確保自己網(wǎng)站的內(nèi)容沒(méi)有被嵌到別人的網(wǎng)站中去,也從而避免了點(diǎn)擊劫持 (clickjacking) 的攻擊。

X-Frame-Options 有三個(gè)值: DENY 表示該頁(yè)面不允許在 frame 中展示,即便是在相同域名的頁(yè)面中嵌套也不允許。

SAMEORIGIN 表示該頁(yè)面可以在相同域名頁(yè)面的 frame 中展示。ALLOW-FROM uri表示該頁(yè)面可以在指定來(lái)源的 frame 中展示。

Spring security默認(rèn)是使用DENY,即拒絕在frame中展示,從而避免點(diǎn)擊劫持的攻擊,當(dāng)然你也可以進(jìn)行單獨(dú)設(shè)置或?qū)-Frame-Option設(shè)置特殊的值。

Customer Header

Spring Security有一些機(jī)制,可以方便地向應(yīng)用程序添加更常見(jiàn)的安全頭。但是,它還提供了允許添加自定義頭的鉤子。有時(shí),您希望將自定義安全頭插入到您的應(yīng)用程序中,而該特性并沒(méi)有被支持。例如,您可能希望盡早支持內(nèi)容安全策略,以確保資源只能從相同的源加載。由于對(duì)內(nèi)容安全策略的支持還沒(méi)有最終確定,瀏覽器使用兩個(gè)常見(jiàn)的擴(kuò)展頭之一來(lái)實(shí)現(xiàn)這個(gè)特性。這意味著我們將需要注入兩次策略。下面的代碼片段中可以看到一個(gè)頭的示例:

X-Content-Security-Policy: default-src 'self'
X-WebKit-CSP: default-src 'self'
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.headers()
    .addHeaderWriter(
    new StaticHeadersWriter(
    "X-Content-Security-Policy",
    "default-src 'self'"))
    .addHeaderWriter(
    new StaticHeadersWriter(
    "X-WebKit-CSP",
    "default-src 'self'"));
}

當(dāng)名稱(chēng)空間或Java配置不支持您想要的頭部時(shí),您可以創(chuàng)建一個(gè)自定義的HeadersWriter實(shí)例,甚至可以提供HeadersWriter的自定義實(shí)現(xiàn)。讓我們看一個(gè)使用XFrameOptionsHeaderWriter的自定義實(shí)例的示例。也許您希望允許為相同的起源構(gòu)建內(nèi)容框架。將策略屬性設(shè)置為SAMEORIGIN很容易支持這一點(diǎn):

@Override
protected void configure(HttpSecurity http) throws Exception {
  http.headers()
  .addHeaderWriter(
  new XFrameOptionsHeaderWriter(
  XFrameOptionsMode.SAMEORIGIN));
}

有時(shí),您可能只想為某些請(qǐng)求編寫(xiě)一個(gè)header。例如,您可能只想保護(hù)您的登錄頁(yè)面。您可以使用DelegatingRequestMatcherHeaderWriter類(lèi)來(lái)這樣做。

@Override
protected void configure(HttpSecurity http) throws Exception {
  DelegatingRequestMatcherHeaderWriter headerWriter =
  new DelegatingRequestMatcherHeaderWriter(
  new AntPathRequestMatcher("/login"),
  new XFrameOptionsHeaderWriter());
  http.headers()
  .addHeaderWriter(headerWriter);
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring MVC整合Shiro權(quán)限控制的方法

    Spring MVC整合Shiro權(quán)限控制的方法

    這篇文章主要介紹了Spring MVC整合Shiro權(quán)限控制,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Java實(shí)現(xiàn)簡(jiǎn)易俄羅斯方塊

    Java實(shí)現(xiàn)簡(jiǎn)易俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Struts2 的國(guó)際化實(shí)現(xiàn)方式示例

    Struts2 的國(guó)際化實(shí)現(xiàn)方式示例

    這篇文章主要介紹了Struts2 的國(guó)際化實(shí)現(xiàn)方式示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Java BigDecimal使用及基本運(yùn)算(推薦)

    Java BigDecimal使用及基本運(yùn)算(推薦)

    Java在java.math包中提供的API類(lèi)BigDecimal,用來(lái)對(duì)超過(guò)16位有效位的數(shù)進(jìn)行精確的運(yùn)算。這篇文章主要介紹了Java BigDecimal使用指南針(推薦),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • spring?@value無(wú)法取值多個(gè)properties文件的解決

    spring?@value無(wú)法取值多個(gè)properties文件的解決

    這篇文章主要介紹了spring?@value無(wú)法取值多個(gè)properties文件的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 如何使用Mockito調(diào)用靜態(tài)方法和void方法

    如何使用Mockito調(diào)用靜態(tài)方法和void方法

    這篇文章主要介紹了如何使用Mockito調(diào)用靜態(tài)方法和void方法的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot+MyBatis實(shí)現(xiàn)MD5加密數(shù)據(jù)庫(kù)用戶(hù)密碼的方法

    SpringBoot+MyBatis實(shí)現(xiàn)MD5加密數(shù)據(jù)庫(kù)用戶(hù)密碼的方法

    MD5技術(shù)主要用于對(duì)用戶(hù)密碼加密,增加賬戶(hù)的安全性,他具有不可逆的特性,不會(huì)被輕易解密,這篇文章給大家介紹SpringBoot+MyBatis實(shí)現(xiàn)MD5加密數(shù)據(jù)庫(kù)用戶(hù)密碼的方法,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Java中幾種常用數(shù)據(jù)庫(kù)連接池的使用

    Java中幾種常用數(shù)據(jù)庫(kù)連接池的使用

    數(shù)據(jù)庫(kù)連接池在編寫(xiě)應(yīng)用服務(wù)是經(jīng)常需要用到的模塊,太過(guò)頻繁的連接數(shù)據(jù)庫(kù)對(duì)服務(wù)性能來(lái)講是一個(gè)瓶頸,使用緩沖池技術(shù)可以來(lái)消除這個(gè)瓶頸,本文就來(lái)介紹Java常見(jiàn)的幾種,感興趣的可以了解一下
    2021-05-05
  • spring boot springjpa 支持多個(gè)數(shù)據(jù)源的實(shí)例代碼

    spring boot springjpa 支持多個(gè)數(shù)據(jù)源的實(shí)例代碼

    這篇文章主要介紹了spring boot springjpa 支持多個(gè)數(shù)據(jù)源的實(shí)例代碼,需要的朋友可以參考下
    2018-04-04
  • Spring Boot thymeleaf模板引擎的使用詳解

    Spring Boot thymeleaf模板引擎的使用詳解

    這篇文章主要介紹了Spring Boot thymeleaf模板引擎的使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論