<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot Xss 攻擊過濾插件

          共 2297字,需瀏覽 5分鐘

           ·

          2020-12-03 17:25

          XSS 是什么

          XSS(Cross Site Scripting)攻擊全稱跨站腳本攻擊,為了不與 CSS(Cascading Style Sheets)名詞混淆,故將跨站腳本攻擊簡(jiǎn)稱為 XSS,XSS 是一種常見 web 安全漏洞,它允許惡意代碼植入到提供給其它用戶使用的頁面中。

          xss 攻擊流程

          55bca597d13062157308fef216115c41.webp

          簡(jiǎn)單 xss 攻擊示例

          • 若網(wǎng)站某個(gè)表單沒做相關(guān)的處理,用戶提交相關(guān)惡意代碼,瀏覽器會(huì)執(zhí)行相關(guān)的代碼。
          fbd1e61bc4ce8054d7670070acd670c2.webp解決方案

          XSS 過濾說明

          • 對(duì)表單綁定的字符串類型進(jìn)行 xss 處理。
          • 對(duì) json 字符串?dāng)?shù)據(jù)進(jìn)行 xss 處理。
          • 提供路由和控制器方法級(jí)別的放行規(guī)則。

          使用 mica-xss

          引入一下 依賴即可


          ??<dependency>
          ???<groupId>net.dreamlugroupId>
          ???<artifactId>mica-coreartifactId>
          ???<version>2.0.9-GAversion>
          ??dependency>
          ??<dependency>
          ???<groupId>net.dreamlugroupId>
          ???<artifactId>mica-xssartifactId>
          ???<version>2.0.9-GAversion>
          ??dependency>

          測(cè)試 XSS 過濾

          測(cè)試 GET 參數(shù)過濾

          • 創(chuàng)建目標(biāo)接口,模擬 get 提交
          @GetMapping("/xss")
          public?String?xss(String?params){
          ??return?params;
          }
          • 返回為空
          ?>?~?curl?--location?--request?GET?'http://localhost:8080/xss?params=%3Cscript%3Ealert(%27xxx%27)%3C/script%3E'

          測(cè)試 POST form 參數(shù)過濾

          • 創(chuàng)建目標(biāo)接口,模擬 post form 提交
          @PostMapping("/xss")
          public?String?xss(String?params){
          ??return?params;
          }
          • 返回為空
          curl?--location?--request?POST?'http://localhost:8080/xss'?\
          --header?'Content-Type:?application/x-www-form-urlencoded'?\
          --data-urlencode?'params='

          測(cè)試 POST body 參數(shù)過濾

          • 創(chuàng)建目標(biāo)接口,模擬 post body 提交
          ????@PostMapping("/xss")
          ????public?String?xss(@RequestBody?Map?body){
          ????????return?body.get("params");
          ????}
          • 返回為空
          curl?--location?--request?POST?'http://localhost:8080/xss'?\
          --header?'Content-Type:?application/json'?\
          --data-raw?'{
          ????"params":""
          }'

          跳過某些接口過濾

          可以使用 @XssCleanIgnore 注解對(duì)方法和類級(jí)別進(jìn)行忽略。

          @XssCleanIgnore
          @PostMapping("/xss")
          public?String?xss(@RequestBody?Map?body){
          ??return?body.get("params");
          }

          原理分析

          常見實(shí)現(xiàn)剖析

          • 目前網(wǎng)上大多數(shù)的方案如下圖,新增 XssFilter 攔截用戶提交的參數(shù),進(jìn)行相關(guān)的轉(zhuǎn)義和黑名單排除,完成相關(guān)的業(yè)務(wù)邏輯。在整個(gè)過程中最核心的是通過包裝用戶的原始請(qǐng)求,創(chuàng)建新的 requestwrapper 保證請(qǐng)求流在后邊的流程可以重復(fù)讀。
          5decaa6b7a6786892a6472b85c6eea23.webp

          mica-xss 實(shí)現(xiàn)

          1. 自定義 WebDataBinder 編輯器支持 form 過濾

          Spring WebDataBinder 的作用是從 web request 中把 web 請(qǐng)求里的parameters綁定到對(duì)應(yīng)的JavaBean上,在 Controller 方法中的參數(shù)類型可以是基本類型,也可以是封裝后的普通 Java 類型。若這個(gè)普通的 Java 類型沒有聲明任何注解,則意味著它的每一個(gè)屬性都需要到 Request 中去查找對(duì)應(yīng)的請(qǐng)求參數(shù),而 WebDataBinder 則可以幫助我們實(shí)現(xiàn)從 Request 中取出請(qǐng)求參數(shù)并綁定到 JavaBean 中。SpringMVC 在綁定的過程中提供了用戶自定義編輯綁定的接口,注入即可在參數(shù)綁定 JavaBean 過程中執(zhí)行過濾。

          479f742d127f48e70534830208e1b07d.webp

          2. 自定義 JsonDeserializer 反序列化支持 Json 過濾

          在 Spring Boot 中默認(rèn)是使用 Jackson 進(jìn)行序列化和反序列化 JSON 數(shù)據(jù)的,那么除了可以用默認(rèn)的之外,我們也可以編寫自己的 JsonSerializer 和 JsonDeserializer 類,來進(jìn)行自定義操作。用戶提交 JSON 報(bào)文會(huì)通過 Jackson 的 JsonDeserializer 綁定到 JavaBean 中。我們只需要自定義 JsonDeserializer 即可完成在綁定 JavaBean 中執(zhí)行過濾。

          549c55b527ad76872642d89a3504a4b8.webp

          3.核心過濾邏輯

          在 mica-xss 中并未采取上文所述通過自己手寫黑名單或者轉(zhuǎn)義方式的實(shí)現(xiàn)方案,而是直接實(shí)現(xiàn) Jsoup 這個(gè)工具類。jsoup 實(shí)現(xiàn) WHATWG HTML5 規(guī)范,并將 HTML 解析為與現(xiàn)代瀏覽器相同的 DOM。

          • 從 URL,文件或字符串中抽取和解析 HTML
          • 使用 DOM 遍歷或 CSS 選擇器查找和提取數(shù)據(jù)
          • 操縱 HTML 元素,屬性和文本
          • 清除用戶提交的內(nèi)容以防止安全白名單,以防止 XSS 攻擊
          • 輸出整潔的 HTML
          4f373ebc77722fa096bf55f4fc34e163.webp

          源碼地址:https://gitee.com/596392912/mica


          瀏覽 131
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产一级片国产特级片 | 日本素人在线影视 | 色综合视频二区偷拍在线 | 日韩三级片一区二区 | 丁香五月激情戏91 |