與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。
沒有留言:
張貼留言