2022年7月22日 星期五

源碼掃描交手Part II

 年初因故將專案做了源碼掃描CHECKMARX,依照相關報告調整邏輯結果還是殘留了150左右的中高風險卡住了,近幾個月在上JAVA 11開發者的課程,補強了些JAVA的基本常識(=.= 做中學只能保證功能正確效率OK但語法是否能把該語言優勢發揮出來就難說了),再次挑戰雖然中高風險一就是150左右,但數據卻是顛倒過來,哈...

裡面的中、低風險有一堆是System.out.print() 、轉存檔案的風險,這主要是抓錯用的寫LOG或是不會被執行的項目,就先放著吧!! 等找到能騙過CHECKMARK說那段不會被跑到的寫法,應該就解決了。

專案管理是MAVRN、架構為MVC 若干的高風險都是在參數內容檢核時的風險,可以透過加Fitter時去觸發檢查XSS跟SQL Injection的邏輯! XssAndSqlHttpServletRequestWrapper 來複寫後再送入GOOGLE拿去檢索可以看到許多範例。

<filter>
  <description></description>
  <display-name>RequestFilter</display-name>
  <filter-name>RequestFilter</filter-name>
  <filter-class>ooo.xxx.filter.RequestFilter</filter-class>
  <inin-param>
<param-name>exclude</param-name>
<param-name>*.js,*.gif,*.jpg,*.jpeg,*.png,*.css,*.ico</param-name>
  </inin-param>
</filter>
<filter-mapping>
  <filter-name>SessionFilter</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>REQUEST</dispatcher>
</filter-mapping>

public class RequestFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {
  // Auto-generated method stub
}

@Override
public void doFilter(ServletRequest httpRequest, ServletResponse httpResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) httpRequest;
HttpServletResponse response = (HttpServletResponse) httpResponse;

XssAndSqlHttpServletRequestWrapper xssRequest = new XssAndSqlHttpServletRequestWrapper((HttpServletRequest) request);
chain.doFilter(xssRequest, response);
}

@Override
public void destroy() {
  // Auto-generated method stub
}

}

CHECKMARK對於資料編碼使用會PASS的

JAVA:

用HtmlUtils.htmlEscape(value) ,之前用URLEncoder.encode(value) 會被無視。

如果邏輯使用StringUtils.isNotBlank() 判斷是否再處理,從報告上看也會被跳過,這時候就得先處理好null的情況後把StringUtils.isNotBlank()拿掉直接強制一定會落入檢核的method才能PASS。

JSP

用 value = org.apache.commons.text.StringEscapeUtils.escapeHtml4(value); 有用,非escapeHtml一就會報錯。


至於SQL Injection大概就是認關鍵字吧,把一些會誤殺的拿掉後多次嘗試即可! 這就不分享了畢竟每個專案環境跟用途不一樣,直接套用GG的機率頗高。