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

Java過濾器如何解決存儲型xss攻擊問題

 更新時間:2024年05月27日 10:48:02   作者:馮浩月  
這篇文章主要介紹了Java過濾器如何解決存儲型xss攻擊問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Java過濾器解決存儲型xss攻擊

XSS攻擊場景

攻擊者可以通過構(gòu)造URL注入JavaScript、VBScript、ActiveX、HTML或者Flash的手段,利用跨站腳本漏洞欺騙用戶,收集Cookie等相關(guān)數(shù)據(jù)并冒充其他用戶。

通過精心構(gòu)造的惡意代碼,可以讓訪問者訪問非法網(wǎng)站或下載惡意木馬,如果再結(jié)合其他攻擊手段(如社會工程學(xué)、提權(quán)等),甚至可以獲取系統(tǒng)的管理權(quán)限。

舉例說明

例如:

在項目看板里待材料初審存儲下面代碼,點擊A項目會彈出框

Payload: <iframe οnlοad=alert("xss");></iframe>

在這里插入圖片描述

例如:

全部階段結(jié)果標(biāo)準(zhǔn)-存儲下面代碼,點擊20200927測試-2

Payload: <textarea οnfοcus=alert("xss"); autofocus>

在這里插入圖片描述

解決方案

找到項目已有的filter過濾器,在過濾HttpServletRequest參數(shù)時,進(jìn)行參數(shù)的處理,使用轉(zhuǎn)義,將 < 轉(zhuǎn)義為 & lt , > 轉(zhuǎn)義為 & gt

  public PaasHttpRequestWrapper(HttpServletRequest request) {
        super(request);
        StringBuilder stringBuilder = new StringBuilder();
        InputStream inputStream = null;
        try {
            inputStream = request.getInputStream();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        if (inputStream != null) {
            try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
                char[] charBuffer = new char[CHAR_BUFFER_LENGTH];
                int bytesRead;
                while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
                    stringBuilder.append(charBuffer, BUFFER_START_POSITION, bytesRead);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            stringBuilder.append("");
        }
        body = stringBuilder.toString();
        // 解決xss攻擊問題
        if (body.contains("<")) {
            body = body.replace("<", "&lt");
        }
        if (body.contains(">")) {
            body = body.replace(">", "&gt");
        }
        initParameterMap();
    }

XSS攻擊及解決方案

什么是XSS攻擊?

XSS攻擊使用Javascript腳本注入進(jìn)行攻擊

XSS攻擊常出現(xiàn)在提交表單中,如博客的評論區(qū)等,用戶可以通過提交評論:<script>alert("你的網(wǎng)站太垃圾了!")</script>,那么只要訪問該頁面的用戶都會彈窗,當(dāng)然,這可能是為了娛樂娛樂,不要小看XSS攻擊,有些人利用XSS攻擊竊取用戶名密碼,調(diào)用黑客的工程,將用戶名和密碼發(fā)送過去,也可以偽裝成釣魚網(wǎng)站。

例如在表單中注入: <script>location.href='http://www.xxx.com'</script> 那么頁面會跳轉(zhuǎn)到xxx.com

還可以根據(jù)js獲取本地瀏覽器的cookie信息,根據(jù)cookie信息完全可以模擬用戶。

注意:谷歌瀏覽器 已經(jīng)防止了XSS攻擊,為了演示效果,最好使用火狐瀏覽器。

那么該如何防止XSS攻擊呢?

實現(xiàn)思路:

使用轉(zhuǎn)義解決。將<轉(zhuǎn)義為&lt    >轉(zhuǎn)義為&gt

  • ①使用過濾器,攔截所有請求,重寫request
  • ②重寫獲取值的方法,將特殊代碼轉(zhuǎn)換成html

具體代碼實現(xiàn):

  • XssHttpServletRequest.java
package cn.itcats;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
 
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
 
public class XssHttpServletRequest extends HttpServletRequestWrapper{
    private HttpServletRequest request;
    
    //需要重寫構(gòu)造方法
    public XssHttpServletRequest(HttpServletRequest request) {
        super(request);
        this.request = request;
    }
        
    //需要重寫getParameter(name)方法,將value進(jìn)行轉(zhuǎn)義
    public String getParameter(String name) {
        String value = request.getParameter(name);
        System.out.println("沒有轉(zhuǎn)義之前:value="+value);
        if(StringUtils.isNotBlank(value)){
            //轉(zhuǎn)化為html,<script>標(biāo)簽都會轉(zhuǎn)化為html格式  &lt;script&gt;
            //工具類來自于org.apache.commons.lang3.StringEscapeUtils
            value = StringEscapeUtils.escapeHtml4(value);
        }
        return value;
    }
 
}
  • web.xml配置過濾器
<!-- 防止XSS攻擊 -->
    <filter>
        <filter-name>FilterXSS</filter-name>
        <filter-class>cn.itcats.FilterXSS</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>FilterXSS</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  • FilterXss.java
package cn.itcats;
 
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
 
public class FilterXSS implements Filter{
 
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }
 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        //強(qiáng)轉(zhuǎn)為HttpServletRequest
        HttpServletRequest req = (HttpServletRequest)request;
        //需要重寫request,重建一個類XssHttpServletRequest 繼承 HttpServletRequestWrapper,重寫構(gòu)造和getParameter方法
        XssHttpServletRequest xssHttpServletRequest = new XssHttpServletRequest(req);
        //務(wù)必傳入是重寫過的request,放行
        chain.doFilter(xssHttpServletRequest, response);
    }
 
    public void destroy() {
        
    }
 
}

注意:只要是文本框、表單等,需要提交并在頁面展示的,一般都需要做防XSS攻擊。 

總結(jié)

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

相關(guān)文章

  • Java應(yīng)用注冊成Windows服務(wù)實現(xiàn)自啟的教程詳解

    Java應(yīng)用注冊成Windows服務(wù)實現(xiàn)自啟的教程詳解

    這篇文章主要給大家介紹了Java應(yīng)用注冊成Windows服務(wù)實現(xiàn)自啟的教程,文中有詳細(xì)的代碼示例和圖文講解供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2024-02-02
  • Spring Cloud 網(wǎng)關(guān)服務(wù) zuul  動態(tài)路由的實現(xiàn)方法

    Spring Cloud 網(wǎng)關(guān)服務(wù) zuul 動態(tài)路由的實現(xiàn)方法

    網(wǎng)關(guān)服務(wù)是流量的唯一入口。不能隨便停服務(wù)。所以動態(tài)路由就顯得尤為必要。這篇文章主要介紹了Spring Cloud 網(wǎng)關(guān)服務(wù) zuul 三 動態(tài)路由的相關(guān)知識,需要的朋友可以參考下
    2019-10-10
  • java實現(xiàn)ATM機(jī)系統(tǒng)(2.0版)

    java實現(xiàn)ATM機(jī)系統(tǒng)(2.0版)

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)ATM機(jī)系統(tǒng)2.0版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Maven Assembly實戰(zhàn)教程

    Maven Assembly實戰(zhàn)教程

    MavenAssembly插件用于創(chuàng)建可分發(fā)包,如JAR、ZIP或TAR文件,通過配置pom.xml,可以生成包含所有依賴的JAR文件或自定義格式的歸檔文件,示例展示了如何使用默認(rèn)描述符和自定義描述符創(chuàng)建JAR包,以及在多模塊項目中使用Assembly插件
    2024-12-12
  • java外部類與內(nèi)部類簡介

    java外部類與內(nèi)部類簡介

    這篇文章簡單介紹了java外部類與內(nèi)部類,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 使用Java實現(xiàn)裁剪和壓縮PPT中的圖片

    使用Java實現(xiàn)裁剪和壓縮PPT中的圖片

    在工作中,PPT演示文稿廣泛應(yīng)用于報告、課程內(nèi)容展示以及項目計劃,然而,當(dāng)?PPT?文件中包含大量圖片時,文件大小常常大幅增加,導(dǎo)致加載緩慢、分享困難等問題,因此在這篇文章中,我們將詳細(xì)介紹如何使用Java實現(xiàn)裁剪和壓縮PPT中的圖片,需要的朋友可以參考下
    2026-03-03
  • Java使用DateTimeFormatter實現(xiàn)格式化時間

    Java使用DateTimeFormatter實現(xiàn)格式化時間

    這篇文章主要介紹了Java使用DateTimeFormatter實現(xiàn)格式化時間,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 詳解Spring?Bean的配置方式與實例化

    詳解Spring?Bean的配置方式與實例化

    本文主要帶大家一起學(xué)習(xí)一下Spring?Bean的配置方式與實例化,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Spring有一定的幫助,需要的可以參考一下
    2022-06-06
  • Maven生命周期和及插件原理用法詳解

    Maven生命周期和及插件原理用法詳解

    這篇文章主要介紹了Maven生命周期和及插件原理用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值的相關(guān)資料
    2020-08-08
  • Mybatis分頁的4種方式實例

    Mybatis分頁的4種方式實例

    這篇文章主要介紹了Mybatis分頁的4種方式實例,包括數(shù)組分頁,sql分頁,攔截器分頁,RowBounds分頁,需要的朋友可以參考下
    2022-04-04

最新評論

孟津县| 鹤庆县| 克什克腾旗| 墨竹工卡县| 大宁县| 河源市| 莫力| 衡水市| 英德市| 隆化县| 徐汇区| 郁南县| 青海省| 巴马| 扬州市| 祁连县| 潜山县| 惠东县| 敦化市| 龙海市| 江门市| 麦盖提县| 古浪县| 武定县| 会宁县| 阳江市| 庆元县| 崇礼县| 和龙市| 淮南市| 炉霍县| 滨海县| 平顶山市| 平江县| 饶河县| 蒙山县| 邹平县| 炎陵县| 江西省| 云浮市| 民县|