国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

SpringBoot如何防止XSS注入攻擊詳解

發(fā)布時(shí)間:2021-07-06 11:13 來(lái)源:腳本之家 閱讀:0 作者:maybelence 欄目: 開(kāi)發(fā)技術(shù)

什么是 XSS 攻擊

在跨站腳本(XSS)攻擊中,攻擊者可以在受害者的瀏覽器中執行惡意腳本。這種攻擊通常是通過(guò)在網(wǎng)頁(yè)中插入惡意代碼 (JavaScript) 來(lái)完成的。攻擊者在使用攻擊后一般能夠:

  • 修改網(wǎng)頁(yè)內容
  • 將用戶(hù)重定向到其他網(wǎng)站
  • 訪(fǎng)問(wèn)用戶(hù)的 Cookie 并利用此信息來(lái)冒充用戶(hù)
  • 訪(fǎng)問(wèn)有關(guān)用戶(hù)系統的關(guān)鍵信息,例如地理位置,網(wǎng)絡(luò )攝像頭,文件系統
  • 將木馬功能注入應用程序

如果被攻擊的用戶(hù)在應用程序中具有更高的權限。攻擊者可以完全控制應用程序,并破壞所有用戶(hù)及其數據。

XSS 攻擊類(lèi)型

常見(jiàn)的 XSS 攻擊主要有三種:存儲型 XSS 攻擊,反射型 XSS 攻擊和 DOM-based 型 XSS 攻擊。

  • 存儲型主要是將 XSS 代碼保存在服務(wù)端(數據庫、文件系統等),當用戶(hù)以后再次請求該資源時(shí)重新解析該 XSS 代碼,從而出現攻擊。
  • 反射型主要發(fā)生在一個(gè)應用程序使用動(dòng)態(tài)頁(yè)面向用戶(hù)顯示錯誤消息時(shí),如果消息中注入了惡意代碼就會(huì )造成 XSS 反射型攻擊。
  • DOM-based 主要是通過(guò)腳本直接修改客戶(hù)端的 DOM 結構,一般這種都是屬于前端 JavaScript 的漏洞。

如何阻止 XSS 注入

下面是一個(gè)簡(jiǎn)單的POST方法,模擬創(chuàng )建 Book 并將其保存到數據庫中。

@RestController
@RequestMapping("/books")
public class BookController {

    @Autowired
    IBookService bookService;

    @PostMapping
    public void saveBook(@RequestBody Book book) {
        bookService.save(book);
    }
}

我們可以在保存的時(shí)候,對 type 值做一段 js 注入,來(lái)模擬存儲型 XSS 攻擊。

現在我們來(lái)請求一下,這里的 JavaScript 只會(huì ) alert 一個(gè)語(yǔ)句,但這種漏洞就有可能被別人利用來(lái)注入一些其他的惡意代碼:

X-XSS-Protection 響應頭

一些瀏覽器內置了對過(guò)濾反射型 XSS 攻擊的支持。在一定程度上有助于 XSS 保護。 我們需要在 HTTP 響應頭添加如下內容確保已啟用該功能,并指示瀏覽器在檢測到 XSS 攻擊時(shí)進(jìn)行阻止。

X-XSS-Protection: 1; mode=block

如果你的項目引入了 Spring Security ,那么默認情況下就會(huì )自動(dòng)添加此標頭。

添加Content-Security-Policy響應標頭

兼容 內容安全策略 瀏覽器將僅執行從我們的“允許”列出的域接收的源文件中加載的腳本,而忽略所有其他腳本,例如內聯(lián)腳本。我們可以添加以下標頭來(lái)啟用瀏覽器的內容安全策略功能。

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .csrf().disable()//為了簡(jiǎn)化示例并更清楚地說(shuō)明XSS注入,此處禁用了CSRF保護。真實(shí)情況請勿使用。
                .authorizeRequests().anyRequest().authenticated()
                .and().httpBasic()
                .and()
                .headers().contentSecurityPolicy("script-src 'self'");
    }
}

以下是所有支持 CSP 的瀏覽器:

入參驗證

我們知道該字段僅需要中文英文和數字字符,因此我們可以使用 Spring 的 Validator 在字段中添加@Pattern注解。

    @NotNull
    @Pattern(message="種類(lèi)只能支持中文英文數字", regexp = "[\u4e00-\u9fa5_a-zA-Z0-9]+")
    private String type;

然后將 @Valid 添加到接收 Book 的方法中,這樣當發(fā)生請求時(shí)就會(huì )自動(dòng)驗證:

@PostMapping
public void saveBook(@RequestBody @Valid Book book) {
    bookService.save(book);
}

客戶(hù)端

現在主流的幾種前端框架,像 Angular 、 React 、 Vue 也可以避免傳統開(kāi)發(fā)可能帶來(lái)的問(wèn)題:

  • 為了系統地阻止 XSS 錯誤,默認情況下,Angular 將所有值視為不可信。當通過(guò)屬性,屬性,樣式,類(lèi)綁定或插值將值從模板插入 DOM 時(shí),Angular 會(huì )清理并轉義不受信任的值。
  • 使用 JSX(React) 可以傳遞一個(gè)函數作為事件處理程序,而不是傳遞可能包含惡意代碼的字符串。
  • React 視圖中的字符串變量將自動(dòng)轉義。
  • Vue 的官方文檔也有說(shuō)明, v-html 動(dòng)態(tài)的渲染任意 html 是十分危險的,容易引發(fā) XSS 注入,所以 v-html 永遠不要用于用戶(hù)提交的信息上。

總結

防止 XSS 漏洞主要涉及以下措施的組合:

  • 利用 X-XSS-Protection 響應頭,利用瀏覽器的支持來(lái)限制反射的 XSS 攻擊。
  • 利用 Content-Security-Policy 響應頭來(lái)啟用瀏覽器的 CSP 功能。
  • 使用 Validator 對輸入信息做相關(guān)校驗。
  • 客戶(hù)端方面 React 使用 JSX 傳遞函數作為事件處理程序,Vue 只在可信內容上使用 v-html ,對用戶(hù)輸入的信息,一定要禁止使用 v-html 。

到此這篇關(guān)于SpringBoot如何防止XSS注入攻擊的文章就介紹到這了,更多相關(guān)SpringBoot防止XSS注入攻擊內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

亚洲精品国产电影| 啦啦啦免费高清在线观看| 久久精品日韩AV无码| 亚洲人成人网站色WWW| 国产毛片久久久久久国产毛片| 亚洲人成无码WWW久久久|