1. 程式人生 > >servlet過濾器防xss,sql注入.filter裡修改parameter引數

servlet過濾器防xss,sql注入.filter裡修改parameter引數

這中間起到最關鍵作用的就是HttpServletRequestWrapper

首先建立一個類繼承HttpServletRequestWrapper。然後重寫getAttribute,getParameter,getParameterValues,getParameterMap這幾個方法。

public class OpRequestWrap extends HttpServletRequestWrapper {

    public OpRequestWrap(HttpServletRequest request) {
        super(request);
    }

    private String format(String name) {
        return StringUtils.replaceEach(name,//
                new String[]{"\"","'","<",">"},             //
                new String[]{""","´","<",">"});
        //return StringEscapeUtils.escapeHtml4(name);
    }

    /**
     *
     * @param name
     * @return
     */
    public Object getAttribute(String name) {
        Object value = super.getAttribute(name);
        if (value instanceof String) {
            value = format(String.valueOf(value));
        }
        return value;
    }

    /**
     * 重寫getParameter方法
     *
     * @param name
     * @return
     */
    public String getParameter(String name) {
        String value = super.getParameter(name);
        if (value == null)
            return null;
        return format(value);
    }

    /**
     *
     * @param name
     * @return
     */
    public String[] getParameterValues(String name) {
        String[] values = super.getParameterValues(name);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                values[i] = format(values[i]);
            }
        }
        return values;
    }

    /**
     * @return
     */
    public Map<String, String[]> getParameterMap() {

        HashMap<String, String[]> paramMap = (HashMap<String, String[]>) super.getParameterMap();
        paramMap = (HashMap<String, String[]>) paramMap.clone();

        for (Iterator iterator = paramMap.entrySet().iterator(); iterator.hasNext(); ) {
            Map.Entry<String,String[]> entry = (Map.Entry<String,String[]>) iterator.next();
            String [] values = entry.getValue();
            for (int i = 0; i < values.length; i++) {
                if(values[i] instanceof String){
                    values[i] = format(values[i]);
                }
            }
            entry.setValue(values);
        }
        return paramMap;
    }
}

然後配置一個過濾器;
   @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        filterChain.doFilter(new OpRequestWrap((HttpServletRequest) servletRequest),servletResponse);
    }

請仔細看doFilter裡面的request,這一步也很重要。它是對request進行包裝,才能起到修改request中引數,屬性的功能。

相關推薦

servlet過濾器xss,sql注入.filter修改parameter引數

這中間起到最關鍵作用的就是HttpServletRequestWrapper 首先建立一個類繼承HttpServletRequestWrapper。然後重寫getAttribute,getParameter,getParameterValues,getParameterMa

命名引數,防止sql注入,使用named parameter

使用named parameter String hql = "from BuildHibernate p where p.beimId= :beimId  ";         Query query = getSession().createQuery(hql);   

防止常見XSS 過濾 SQL注入 JAVA過濾器filter

XSS : 跨站指令碼攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站指令碼攻擊縮寫為XSS。惡意攻擊者往Web頁面裡插入惡意html程式碼,當用戶瀏覽該頁之時,嵌入其中Web裡

php對前臺提交的表單資料做安全處理(SQL注入XSS攻擊等)

/** * 防sql注入字串轉義 * @param $content 要轉義內容 * @return array|string */ public static function escapeString($content) { $pa

安全防禦之xssSQL注入、與CSRF攻擊

XSS攻擊 個人理解,專案中最普通的就是通過輸入框表單,提交js程式碼,進行攻擊例如在輸入框中提交 <script>alert("我是xss攻擊");</script>,如果沒有防御措施的話,就會在表單提交之後,彈出彈窗 防禦措施,目前我主要是用一個過濾器,將特殊字元進行轉

JAVA WEB中處理SQL注入|XSS跨站指令碼攻擊(咋個辦呢 zgbn)

JAVA WEB中處理防SQL注入|防XSS跨站指令碼 在java web專案中,必然會涉及到從客戶端向服務端提交資料,那麼由於服務端對資料的處理等動作,會因為字串拼接和使用的特殊性,存在一些漏洞被人利用。 這篇文章,主要介紹一下在java web專案中,程

PHP中XSS攻擊和sql注入

SQL注入如何防? TP中的底層已經做了防SQL注入的操作,只要我們操作資料庫時使用TP提供給我們的方法就不會有問題,如新增商品時我們呼叫了add方法。唯一要注意的就是如果我們自己拼SQL執行時就要自己來過濾了。 總結:如果要自己拼SQL語句,一定要自己再過濾一下【add

配置攔截器xsssql注入

1. web.xml配置攔截器 自定義一個實現了Filter介面的類XssAndSqlFilter。這個類用來實現具體的引數替換邏輯。 <!-- 防XSS和sql注入漏洞 開始 --> <filter>

php用於SQL注入的幾個函式

用於防SQL注入的幾個函式 不要相信使用者的在登陸中輸入的內容,需要對使用者的輸入進行處理 SQL注入: ' or 1=1 #   防止SQL注入的幾個函式:   addslashes($string):用反斜線引用字串中的特殊字元' " \ $u

MySQLSQL注入

1,mysql_real_escape_string()函式已經不安全,可以利用編碼的漏洞來實現輸入任意密碼就能登入伺服器的注入攻擊 2,使用擁有Prepared Statement機制的PDO和MYSQLi來代替mysql_query(注:mysql_query自 PHP 5.5.0 起已

ubuntu上安裝Apache2+ModSecurity及實現SQL注入演示

ubuntu上安裝Apache2+ModSecurity及實現防SQL注入演示 一、Apache2 的安裝 1.1、安裝環境: OS:Ubuntu 16.04.1 LTS Apache: Apache/2.4.18 (Ubuntu) 安裝命令: 更新安裝源:

SQL注入 web開發中防止SQL注入

web開發中防止SQL注入   一、SQL注入簡介 SQL注入是比較常見的網路攻擊方式之一,它不是利用作業系統的BUG來實現攻擊,而是針對程式設計師編寫時的疏忽,通過SQL語句,實現無賬號登入,甚至篡改資料庫。 二、SQL注入攻擊的總體思路 1.尋找到SQL

SQL注入XSS攻擊

SQL注入: 所謂SQL注入,就是通過把SQL命令插入到提交的Web表單或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令,導致資料庫中的資訊洩露或者更改。 防範: 1.永遠不要信任使用者的輸入,將使用者輸入的資料當做一個引數處理: 使用引數化的形式,也就是將使用者輸入的東西以一

回頭探索JDBC及PreparedStatementSQL注入原理

概述 JDBC在我們學習J2EE的時候已經接觸到了,但是僅是照搬步驟書寫,其中的PreparedStatement防sql注入原理也是一知半解,然後就想回頭查資料及敲測試程式碼探索一下。再有就是我們在專案中有一些配置項是有時候要變動的,比如資料庫的資料來源,為了在修改配置時不改動編譯的程式碼,我們把要變動的

XSSSQl注入與防範

XSS攻擊全稱跨站指令碼攻擊(cross-site scripting ),是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站指令碼攻擊縮寫為XSS,XSS是一種在web應用中的電腦保安漏洞,它允許惡意web使用者將程式碼植入到提供給其它使用者使

Python 資料庫,操作mysql,sql注入引數

  demo.py(防sql注入): from pymysql import * def main(): find_name = input("請輸入物品名稱:") # 建立Connection連線 conn = connect(host='local

Servlet過濾器----Filter

JavaEE的Servlet規範描述了三種技術:Servlet,Filter,Listener (一)過濾器簡介 Filter也稱之為過濾器,它是Servlet技術中最實用的技術,WEB開發人員通過Filter技術,對web伺服器管理的所有web資源:例如Jsp, Servlet, 靜態圖片檔案或靜態 h

詳解SQL 注入XSS 攻擊、CSRF 攻擊

總結 身為一名 web 開發人員,應該去了解一下如何能夠進行 XSS 攻擊,這並不是要你去成為一名黑客去攻擊別人的網站,去盜取別人的資訊,而是去了解有哪些 XSS 攻擊場景,瞭解產生該漏洞的原因,從而去思考為什麼會產生這個 bug,如何去修復這個 bug。要想設計出更好的 XSS 過濾器,就必須得知道有

Web攻防之XSS,CSRF,SQL注入

 copy to:https://www.cnblogs.com/drawwindows/archive/2013/03/11/2954259.html   摘要:對Web伺服器的攻擊也可以說是形形色色、種類繁多,常見的有掛馬、SQL注入、緩衝區溢位、嗅探、利用IIS等針對Webser

sql注入方法

一、什麼是sql注入 sql注入是比較常見的網路攻擊方式之一,它不是利用作業系統的bug進行攻擊,而是通過程式設計程式碼的疏漏,通過編寫特定的sql語句,進行資料庫的非法訪問。 二、 sql注入流程 尋找sql注入位置 判斷伺服器型別和後臺資料型別 針對不同的伺服器和資料庫特點