摘要:發(fā)現(xiàn)無效后,會返回一個(gè)的訪問拒絕,不過可以通過配置類處理異常來定制行為。惡意用戶可能提交一個(gè)有效的文件,并使用它執(zhí)行攻擊。默認(rèn)是禁止進(jìn)行嗅探的。
前言
xss攻擊(跨站腳本攻擊):攻擊者在頁面里插入惡意腳本代碼,用戶瀏覽該頁面時(shí),腳本代碼就會執(zhí)行,達(dá)到攻擊者的目的。原理就是:攻擊者對含有漏洞的服務(wù)器注入惡意代碼,引誘用戶瀏覽受到攻擊的服務(wù)器,并打開相關(guān)頁面,執(zhí)行惡意代碼。
xss攻擊方式:一、反射性攻擊,腳本代碼作為url參數(shù)提交給服務(wù)器,服務(wù)器解析執(zhí)行后,將腳本代碼返回給瀏覽器,最后瀏覽器解析執(zhí)行攻擊代碼;二、存儲性攻擊,和發(fā)射性攻擊的區(qū)別是,腳本代碼存儲在服務(wù)器,下次在請求時(shí),不用再提交腳本代碼。其中一個(gè)示例圖如下所示:
CSRF攻擊:跨站請求偽造攻擊,CSRF是一種欺騙受害者提交惡意請求的攻擊,并劫持受害者的身份和特權(quán),并以受害者的身份訪問未授權(quán)的信息和功能。序列圖如下所示:
解決XSS攻擊和CSRF攻擊的一個(gè)推薦方法就是同步器Token,就是在post的請求中,增加一個(gè)token,每次請求到來,服務(wù)器都會驗(yàn)證請求中的token和服務(wù)器期望的值是否一致,如果不一致,服務(wù)器將請求視為非法的,整個(gè)過程的示例圖如下所示:
在spring security中如果使用的是 @EnableWebMvcSecurity而不是@EnableWebSecurity,同步器Token是默認(rèn)打開的,通過http().csrf().disable()可以關(guān)閉同步器token功能。spring security發(fā)現(xiàn)token無效后,會返回一個(gè)403的訪問拒絕,不過可以通過配置AccessDeniedHandler類處理InvalidCsrfTokenException異常來定制行為。
spring security雖然默認(rèn)是打開同步器token保護(hù)的,但是也提供了一個(gè)顯示打開的行為即http().csrf(),同時(shí)需要在html的form表單中添加以“”
如果請求的是json或ajax請求,如何使用同步器token防護(hù)那?
json請求的話,我們可以在header的元數(shù)據(jù)中添加token防護(hù),代碼如下所示:
...
ajax請求的話,可是使用如下代碼:
$(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的常見問題
1.超時(shí)
因?yàn)閠oken是存儲在httpsession中的,所以token存在超時(shí)的問題,一旦超時(shí),則配置的accessDeniedHandler將接受一個(gè)異常,或者spring security直接拒絕訪問;
2.登錄
為了防止偽造的登錄請求,在登錄的form中也需要添加token,而token又是存儲在HttpSession中,也就是說一旦發(fā)現(xiàn)token屬性,就會創(chuàng)建一個(gè)HttpSession,這和無狀態(tài)架構(gòu)模式可能會產(chǎn)生一些沖突;
3.注銷
添加CSRF將更新LogoutFilter過濾器,使其只使用HTTP POST。這確保了注銷需要一個(gè)CSRF令牌,并且惡意用戶不能強(qiáng)制注銷您的用戶。也就是說,注銷不再是一個(gè)get請求,而是一個(gè)post請求;
spring security 支持的response header 包括:Cache-Control,Content-type options,HTTP Strict Transport Security,X-Frame-Options,X-XSS-Protection 如果你使用的是WebSecurityConfigurerAdapter 配置方式,則這些頭都是默認(rèn)支持的,你可以通過調(diào)用 http.header().disable()關(guān)閉這些缺省的頭。當(dāng)然你也可以多帶帶配置,但是如果你多帶帶配置的話,只有你配置的頭會起作用,其他的頭都不再默認(rèn)支持了。下面分別來討論一下這些響應(yīng)header的含義;
Cache-Control
如果不加任何控制,瀏覽器通常會緩存你的認(rèn)證相關(guān)信息,這在一定程度上會造成你的信息泄露,因此在默認(rèn)情況下,spring security會在響應(yīng)頭里加入緩存控制如下所示:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: 0
當(dāng)然你也可以通過 http.header().cacheControl()方法多帶帶打開緩存控制,你也可以通過HttpServletResponse.setHeader(String,String)方法對特殊的響應(yīng)做處理,從而確保css js 圖片能夠合適地被緩存,在spring mvc中,可以通過配置進(jìn)行設(shè)置,下面的代碼對所有的資源都增加了緩存:
@EnableWebMvc public class WebMvcConfiguration extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers( ResourceHandlerRegistry registry) { registry .addResourceHandler("/resources/**") .addResourceLocations("/resources/") .setCachePeriod(3_155_6926); } // ... }
Content-type Options
歷史上很多很多瀏覽器都能可以通過對請求類型的content進(jìn)行嗅探,猜測請求類型,從而提高用戶體驗(yàn),但是這會帶來XSS攻擊。例如有些站點(diǎn)允許用戶向其提交有效的postScript腳本,并查看他。惡意用戶可能提交一個(gè)有效的js文件,并使用它執(zhí)行XSS攻擊。spring security默認(rèn)是禁止進(jìn)行嗅探的。
HTTP Strict Transport Security
當(dāng)你訪問一個(gè)站點(diǎn)是,例如www.baidu.com,省略了https協(xié)議,潛在的你會受到中間人攻擊,為了減少這種情況,就是告知瀏覽器,當(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)訪問都使用https協(xié)議,includeSubDomains說明該站點(diǎn)的子域名也使用https協(xié)議訪問。
X-frame-optiont
X-Frame-Options HTTP 響應(yīng)頭是用來給瀏覽器指示允許一個(gè)頁面可否在 ,
Customer HeaderSpring Security有一些機(jī)制,可以方便地向應(yīng)用程序添加更常見的安全頭。但是,它還提供了允許添加自定義頭的鉤子。有時(shí),您希望將自定義安全頭插入到您的應(yīng)用程序中,而該特性并沒有被支持。例如,您可能希望盡早支持內(nèi)容安全策略,以確保資源只能從相同的源加載。由于對內(nèi)容安全策略的支持還沒有最終確定,瀏覽器使用兩個(gè)常見的擴(kuò)展頭之一來實(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)名稱空間或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í),您可能只想為某些請求編寫一個(gè)header。例如,您可能只想保護(hù)您的登錄頁面。您可以使用DelegatingRequestMatcherHeaderWriter類來這樣做。
@Override protected void configure(HttpSecurity http) throws Exception { DelegatingRequestMatcherHeaderWriter headerWriter = new DelegatingRequestMatcherHeaderWriter( new AntPathRequestMatcher("/login"), new XFrameOptionsHeaderWriter()); http.headers() .addHeaderWriter(headerWriter); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76509.html
摘要:用于發(fā)布身份驗(yàn)證事件的。導(dǎo)入用于安全,配置身份驗(yàn)證,這在非應(yīng)用程序中也是相關(guān)的。安全出于安全考慮,除和之外的所有默認(rèn)禁用,屬性可用于啟用。有關(guān)保護(hù)的其他信息可以在參考指南中找到。 28. 安全 如果在類路徑上有Spring Security,那么web應(yīng)用程序默認(rèn)是安全的,Spring Boot依賴Spring Security的內(nèi)容協(xié)商策略來決定是使用httpBasic還是formL...
摘要:框架具有輕便,開源的優(yōu)點(diǎn),所以本譯見構(gòu)建用戶管理微服務(wù)五使用令牌和來實(shí)現(xiàn)身份驗(yàn)證往期譯見系列文章在賬號分享中持續(xù)連載,敬請查看在往期譯見系列的文章中,我們已經(jīng)建立了業(yè)務(wù)邏輯數(shù)據(jù)訪問層和前端控制器但是忽略了對身份進(jìn)行驗(yàn)證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護(hù)REST API 重拾后端之Spring Boot(一):REST API的搭建...
摘要:框架入門簡介是一個(gè)能夠?yàn)榛诘钠髽I(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。 1.Spring Security框架入門 1.1 Spring Security簡介 Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應(yīng)用上下文中配置的Bean,充分利用了Spring IoC,DI(...
摘要:一旦最基本的應(yīng)用創(chuàng)建好了,你可以給他加上安全防護(hù)。一旦成功登出了,我們的應(yīng)用程序重定向到到并顯示相應(yīng)的登陸成功的消息。這標(biāo)記該應(yīng)用程序是一個(gè)應(yīng)用程序,并激活一些關(guān)鍵行為,比如創(chuàng)建一個(gè)。一旦應(yīng)用程序啟動(dòng),用瀏覽器訪問。 原網(wǎng)頁 https://spring.io/guides/gs/securing-web/ 本指南將引導(dǎo)您完成創(chuàng)建一個(gè)資源由Spring Security的保護(hù)的一個(gè)簡單...
摘要:啟用安全性這個(gè)簡單的默認(rèn)配置指定了如何保護(hù)請求,以及客戶端認(rèn)證用戶的方案。基于數(shù)據(jù)庫進(jìn)行認(rèn)證用戶數(shù)據(jù)通常會存儲在關(guān)系型數(shù)據(jù)庫中,并通過進(jìn)行訪問。必須經(jīng)過認(rèn)證其他所有請求都是允許的,不需要認(rèn)證。要求用戶不僅需要認(rèn)證,還要具備權(quán)限。 Spring Security Spring Security 是基于Spring 應(yīng)用程序提供的聲明式安全保護(hù)的安全框架。Spring Sercurity ...
摘要:截至年月日,將網(wǎng)站標(biāo)記為不安全。管理密碼使用密碼哈希以純文本格式存儲密碼是最糟糕的事情之一。是中密碼哈希的主要接口,如下所示提供了幾種實(shí)現(xiàn),最受歡迎的是和。 Spring Boot大大簡化了Spring應(yīng)用程序的開發(fā)。它的自動(dòng)配置和啟動(dòng)依賴大大減少了開始一個(gè)應(yīng)用所需的代碼和配置量,如果你已經(jīng)習(xí)慣了Spring和大量XML配置,Spring Boot無疑是一股清新的空氣。 Spring ...
閱讀 2385·2021-11-24 10:31
閱讀 3438·2021-11-23 09:51
閱讀 2252·2021-11-15 18:11
閱讀 2398·2021-09-02 15:15
閱讀 2462·2019-08-29 17:02
閱讀 2295·2019-08-29 15:04
閱讀 842·2019-08-29 12:27
閱讀 2866·2019-08-28 18:15