1. 程式人生 > >Java Web編程

Java Web編程

改變 圖片文件 gets 包括 wave zha exce quic orm框架

一、二、三有空補

四. Web應用的安全

1. CSS攻擊,跨站腳本攻擊

跨站腳本,顧名思義,就是惡意攻擊者利用網站漏洞往Web頁面裏插入惡意代碼,一般需要以下幾個

條件:

(1)客戶端訪問的網站是一個有漏洞的網站,但是他沒有意識到;

(2)在這個網站中通過一些手段放入一段可以執行的代碼,吸引客戶執行(通過鼠標點擊等);

(3)客戶點擊後,代碼執行,可以達到攻擊目的。

解決方案:對用戶輸入的數據進行HTML轉移處理。如今很多開源框架默認就支持HTML的轉義。

2. CSRF攻擊(Cross Site Request Forgery, 跨站域請求偽造)

你這可以這麽理解 CSRF 攻擊:攻擊者盜用了你的身份,偽裝成你發送惡意請求。CSRF能夠做的事

情包括:以你名義發送郵件,發消息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬......造成的問題包

括:個人隱私泄露以及財產安全。

具體攻擊過程如下:

(1)用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登錄網站A;

(2)在用戶信息通過驗證後,網站A產生Cookie信息並返回給瀏覽器,此時用戶登錄網站A成功,可以正

常發送請求到網站A;

(3)用戶未退出網站A之前,在同一瀏覽器中,打開一個TAB頁訪問網站B;

(4)網站B接收到用戶請求後,返回一些攻擊性代碼,並發出一個請求要求訪問第三方站點A

解決方案:

(1)將cookie設置成HttpOnly

(2)增加token

其原理是在請求中放入攻擊者所不能偽造的信息,並且該新信息不存在於cookie中。鑒於此,系

統開發人員可以在HTTP請求中以參數的形式加入一個隨機產生的token,並在服務端進行token驗證,

如果請求中沒有token或者token內容不正確,則認為CSRF攻擊而拒絕該請求。例如,token可以存放

在表單中的隱藏域中:<input type="hidden" name="_token" value="tokenvalue"/>。token的值通過服

務端生成,表單提交後token的值通過POST請求與參數一同帶到服務端,每次會話可以使用相同的

token,會話過期,則token失效,攻擊者因無法獲取token,也就無法偽造請求。

          HttpSession session=request.getSession()
          Object token=session.getAttribute("_token")
          if(token==null||"".equals(token))
          {
             session.setAttribute("_token",UUID.randomUUID().toString());
          }

3.SQL註入攻擊

解決方案:

(1)使用預編譯語句(PreparedStatement)

預編譯語句使用參數占位符來替代需要動態傳入的參數,這樣攻擊者無法改變SQL語句的結構,

SQL語句的語義不會發生變化,即便用戶輸入sql,它會將其轉義。

例如,原語句:

select * from hhuser where nick=nickname and password=password

例如用戶輸入 ‘or ‘1‘=‘1時,不使用預編譯,生成語句為:

select * from hhuser where nick=‘zhangsan‘ and password=‘‘ or ‘1‘=‘1‘

使用預編譯:

select * from hhuser where nick=‘zhangsan‘ and password=‘\‘ or \‘1\‘=\‘1‘

可見發生了轉義。

(2)使用ORM框架,如IBATIS和Hibernate等都支持輸入變量的轉義實現辦法時通過#配置變量

4.文件上傳漏洞

(1)一般處理方法

為了防止用戶上傳惡意的可執行文件和腳本,以及將文件服務器當做免費的文件存儲服務器使用,

我們需要對上傳的文件進行白名單校驗並限制上傳文件的大小,上傳文件需要重新命名,使共攻者無

法猜測上傳文件的訪問路徑。對於上傳的文件來說,不能簡單地通過後綴名稱判斷文件的類型,因為

惡意攻擊可以將可執行文件的後綴名稱改成圖片或者其它後綴類型,誘導用戶執行。因此,判斷文件

類型需要使用更安全的方式,很多類型的文件起使得幾個字節內容使固定得,根據這幾個字節的內容,

就可以確定文件的類型,這幾個字節被稱為魔數。

(2)配合使用imagemaglck

對於圖片類型的文件,可以上傳後對圖片進行相應的縮放,破壞惡意用戶上傳的二進制可執行文

件的結構。imagemaglck是一套功能強大、穩定並且開源的對圖片進行處理的開發工具包,能處理多

種格式的圖片文件,可以利用imagemaglck來對圖片進行縮放。

魔數枚舉類型:

public enum FileType {
 
    /** JPEG */
    JPEG("FFD8FF"),
 
    /** PNG */
    PNG("89504E47"),
 
    /** GIF */
    GIF("47494638"),
 
    /** TIFF */
    TIFF("49492A00"),
 
    /** Windows bitmap */
    BMP("424D"),
 
    /** CAD */
    DWG("41433130"),
 
    /** Adobe photoshop */
    PSD("38425053"),
 
    /** Rich Text Format */
    RTF("7B5C727466"),
 
    /** XML */
    XML("3C3F786D6C"),
 
    /** HTML */
    HTML("68746D6C3E"),
 
    /** Outlook Express */
    DBX("CFAD12FEC5FD746F "),
 
    /** Outlook */
    PST("2142444E"),
 
    /** doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db */
    OLE2("0xD0CF11E0A1B11AE1"),
 
    /** Microsoft Word/Excel */
    XLS_DOC("D0CF11E0"),
 
    /** Microsoft Access */
    MDB("5374616E64617264204A"),
 
    /** Word Perfect */
    WPB("FF575043"),
 
    /** Postscript */
    EPS_PS("252150532D41646F6265"),
 
    /** Adobe Acrobat */
    PDF("255044462D312E"),
 
    /** Windows Password */
    PWL("E3828596"),
 
    /** ZIP Archive */
    ZIP("504B0304"),
 
    /** ARAR Archive */
    RAR("52617221"),
 
    /** WAVE */
    WAV("57415645"),
 
    /** AVI */
    AVI("41564920"),
 
    /** Real Audio */
    RAM("2E7261FD"),
 
    /** Real Media */
    RM("2E524D46"),
 
    /** Quicktime */
    MOV("6D6F6F76"),
 
    /** Windows Media */
    ASF("3026B2758E66CF11"),
 
    /** MIDI */
    MID("4D546864");
 
    private String value = "";
 
    private FileType(String value) {
        this.value = value;
    }
 
    public String getValue() {
        return value;
    }
 
    public void setValue(String value) {
        this.value = value;
    }
 
}

Java Web編程