ESAPI(Enterprise Security API)是一个免费开源的Web应用程序API,目的帮助开发者开发出更加安全的代码,并且它本身就很方便调用。
官方API文档:https://www.javadoc.io/doc/org.owasp.esapi/esapi/2.1.0
ESAPI 安装(JAVA)
- 下载 ESAPI 的 Jar包 和 源码。
- 下载 Log4j(一定要导入这个jar包,没有会报错的!)
- JAVAEE项目中,将
esapi.jar
和log4j.jar
放到WEB-INF
下的lib
目录里面。
ESAPI 防护XSS跨站脚本攻击
ESAPI提供了两个相关接口 Encode、Validator 来防护XSS攻击。
Encode接口
Encode(编码器接口)包含了许多解码输入和编码输出的方法,这样处理过的字符对于各种解释器都是安全的。
ESAPI根据XSS问题的特征和产生的原因,提供了不同的接口:
- 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)");
- 复合(嵌套)编码器
<script>
var vDiv= document.createElement('div');
vDiv.innerHTML ="<%=ESAPI.encoder.encodeForJS(ESAPI.encoder.encodeForHTML(divVALUE))%>";
document.body.appendChild(vDiv);
</script>
网友评论