https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-view-jsp
背景描述
昨天在测试CodeQL扫公司项目XSS的准确型,遇到下面一个情况,没有对输入做任何处理,但是在浏览器中测试时发现却做了HTML编码;Service、Filter等所有能找的地方都找遍了也没有发i发现进行编码的地方。
后来才知道原来Spring的标签在渲染时默认会对属性值进行HTML实体编码。
input标签
以
在JSP文件中,使用如下标签时
<form:input path="house"/>
在HTML中会渲染成下面的代码
<input type="text" name="house" value="house的值">
htmlEscape属性,所有标签都支持,会对属性值进行HTML实体编码,默认值是true
DEMO
Controller
JSP
需要在JSP文件中需要先引入标签库
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
如上第一个
第二个
第三个标签使用了传统的方式来输出变量。
HTML
http://127.0.0.1:8080/learn?author=authorsink"&title=titlesink"&url=urlsink“
可以看到第一个input标签,会对属性值进行HTML实体编码,第二个第三个input标签没有对属性值进行HTML实体编码。
总结
Spring的标签库在渲染时默认会对属性值进行HTML实体编码,这样的话如何编写CodeQL的Sanitizer呐?
解决办法是:TODO
1、CodeQL有办法识别,那么应该怎么识别呐?
2、CodeQL没有办法识别,只是通过二次验证?