ESAPI(Enterprise Security API)是一個(gè)免費(fèi)開(kāi)源的Web應(yīng)用程序API侄旬,目的幫助開(kāi)發(fā)者開(kāi)發(fā)出更加安全的代碼词顾,并且它本身就很方便調(diào)用渺鹦。
官方API文檔:https://www.javadoc.io/doc/org.owasp.esapi/esapi/2.1.0
ESAPI 安裝(JAVA)
- 下載 ESAPI 的 Jar包 和 源碼萧吠。
- 下載 Log4j(一定要導(dǎo)入這個(gè)jar包符喝,沒(méi)有會(huì)報(bào)錯(cuò)的!)
- JAVAEE項(xiàng)目中,將
esapi.jar
和log4j.jar
放到WEB-INF
下的lib
目錄里面。
ESAPI 防護(hù)XSS跨站腳本攻擊
ESAPI提供了兩個(gè)相關(guān)接口 Encode、Validator 來(lái)防護(hù)XSS攻擊被冒。
Encode接口
Encode(編碼器接口)包含了許多解碼輸入和編碼輸出的方法,這樣處理過(guò)的字符對(duì)于各種解釋器都是安全的轮蜕。
ESAPI根據(jù)XSS問(wèn)題的特征和產(chǎn)生的原因姆打,提供了不同的接口:
- HTML編碼器(encodeForHTML)
<body>
<table>
<tr>
<% String msg = "<script>alert('xss')</script>";
<td> <%=ESAPI.encoder().encodeForHTML( msg ) %></td>
<!-- <td> <script>alert('xss')</script> </td> -->
</tr>
</table>
</body>
- HTML屬性編碼器(encodeForHTMLAttribute)
<% String img_url = "\" /><script>alert('xss')</script><img src=\"";
<img src="<%=ESAPI.encoder().encodeForHTMLAttribute( img_src ) %>" />
// out
<img src="" /><script>alert('xss')</script><img src="" />
- JavaScript編碼器(encoderForJavaScript)
<script>
var searchValue = <%=ESAPI.encoder().encoderForJavaScript( searchValue )%>;
</script>
- CSS編碼器(encoderForCSS)
String safe_css = ESAPI.encoder().encoderForCSS( css );
- URL編碼器(encodeForURL)
String safe_url = ESAPI.encoder().encodeForURL("/?callback=<script>alert('xss')</script>");
- VBScript編碼器(encodeForVBScript)
String vb = ESAPI.encoder().encodeForVBScript("add(1)");
- 復(fù)合(嵌套)編碼器
<script>
var vDiv= document.createElement('div');
vDiv.innerHTML ="<%=ESAPI.encoder.encodeForJS(ESAPI.encoder.encodeForHTML(divVALUE))%>";
document.body.appendChild(vDiv);
</script>