2016-11-07 143 views
0

你好,我使用ESAPI進行編碼和解碼字符串,以避免腳本攻擊,我用這樣的:JAVA ESAPI編碼器

public static String encode(String value) { 
    if (value == null) { 
     return null; 
    } 
    Encoder encoder = ESAPI.encoder(); 
    return encoder.encodeForHTML(encoder.canonicalize(value)); 
} 

的問題是如果我通過字符串「%」的標誌,並使用解碼StringEscapeUtilsunescapeHtml它將「%」更改爲 我應該使用不同的方法進行無人看管?

回答

0

我相信這似乎是ESAPI defaultencoder canonilize方法的問題,剛發現一個問題跟蹤中提到GitHub的鏈接 https://github.com/ESAPI/esapi-java/issues/1

+0

你想要的實際問題是https://github.com/ESAPI/esapi-java-legacy/issues/377,但它不適用於此。 – avgvstvs

0

的問題是使用Encoder.canonicalize(),你在這裏做。在輸入驗證之前進行規範化,而不是在輸出之前。

只要使用這裏的編碼方法,不要使用canonicalize方法。對。規範化

其他明智的建議:

  1. 不要堅持規範化的值。僅針對其執行 驗證邏輯。含義,RawInput-> Canonicalize->驗證。如果確認,則堅持/處理原始值。

  2. 該方法的主要優點是檢測混合或多編碼攻擊。