準退休工程師的日常
在IntelliJ IDEA Community(社群版)建立Spring Boot JSP專案。
客戶都是用這套Checkmarx來掃程式碼漏洞,大部分弱點都是來自於JSP頁面與Controller間傳遞參數時的XSS的潛在漏洞。
在JSP若要同時使用<c:out>及<fmt:formatNumber>可以利用下面寫法。
<c:out>
<fmt:formatNumber>
如果在jsp頁面傳遞request value時,通常會在EL語法套上<c:out value="${...}"/>或${fn:escapeXml(...)}來防止XSS攻擊的潛在風險,也就是把html的特殊符號(e.g.&,<,>,",')取代成html代碼,但如果傳遞的request值為JSONObject就無法使用<c:out>了,因為json中的雙引號為xml跳脫字元,會被取代成html code '
<c:out value="${...}"/>
${fn:escapeXml(...)}
&
<
>
"
'
'
JSTL <c:out>有個跳脫xml字元的屬性escapeXml預設為true。其所跳脫的字元如下。
escapeXml
true
在JSP的EL可使用JSTL的fn:substring()取得子字串
fn:substring()
我使用的Eclipse版本為 Mars(4.5.0),但Eclipse認不得HTML 5的新標籤例如<main>並出現Unknown tag name的警告,雖然對執行沒有影響但很礙眼,所以要把警告關閉。
<main>
Unknown tag name
在JSP幾乎都會用到的taglibs(標籤庫)例如JSTL,可以放在一個共用的JSP片段中在include至要使用的JSP頁面中,例如
避免jsp被瀏覽器cache住而無法刷新內容,可在jsp頁面加入以下程式碼。
如果被include的jsp文件的內容出現亂碼,則在被include的jsp中最上方加入以下應該可以解決。
Math.random()
${Math.random()}。
Java網路應用程式的context path,servlet path及path info的區別如下
在JSP的EL表示式中比較兩個字串是否相等時,可以使用eq。
eq
請看下面jsp的<input>的name的命名方式。
<input>
name
本篇介紹JSTL(JSP Standard Tag Library)的格式化標籤(formatting tags)。
JSTL core tag的<c:out>及fn:escapeXml()用來處理XML或HTML中被視為標記(markup)的字元,會轉成一般字串處理。
fn:escapeXml()