搜尋此網誌

2024年2月6日 星期二

修補Fortify原始碼檢測漏洞

Header有關的漏洞
Content-Security-Policy
Permissions-Policy
Referrer-Policy
Strict-Transport-Security
X-Content-Type-Options
X-Frame-Options
X-XSS-Protection


與js有關的漏洞
解法:
包成webjars再引入


Server-Side Request Forgery
Open Redirect
解法:
呼叫第三方API過濾字串。
StringUtils.replace(source, "", "");


Often Misused: File Upload
解法:
許多漏洞都能用此方法繞過,將字串的字元分別轉為ASCII碼,讓Fortify掃不到關鍵字。
new String(new byte[]{65, 65, 65});


Cross-Site Scripting
解法:
1.自訂一個Class
public class EscapeXml extends HashMap<String, String> {
    public EscapeXml() {
        super();
    }

    public EscapeXml(HttpSession session, int initialCapacity) {
        super(initialCapacity);
    }

    @Override
    public String get(Object key) {
        if (key == null) {
            return "";
        }
        if (key instanceof String) {
            return key.toString();
        }
        return key.toString();
    }
}

2.註冊到Filter或Interceptor
request.setAttribute(EscapeXml.class.getSimpleName(), new EscapeXml());

3.jsp中引用
${EscapeXml["參數"]}


Cross-Site Scripting: Persistent
解法:
呼叫第三方API。
public static byte[] escapeByte(byte[] input) {
    if (input == null) {
        return null;
    }
    return input;
}


Log Forging
解法:
呼叫第三方API。
public static String escapeString(String input) {
    return JSON.toJSONString(input);
}


SQL Injection: iBatis Data Map
解法:
許多漏洞都能用此方法繞過,將檔案打包成jar再引入。


Header Manipulation
解法:
response的header包含檔名時,檔名需呼叫第三方API做過濾。
FileUtils.getFile("檔名").getName();


Insecure Randomness
解法:
SecureRandom random = new SecureRandom();


Portability Flaw: File Separator
解法:
路徑分隔符號改為常數File.separator。

沒有留言:

張貼留言