我最近在使用 JSP 呈现页面的应用程序中发现了一个 XSS 漏洞。JSP 中的易受攻击代码如下所示:
<td>${customer.notes}</td>
通过转义用户控制的输入来修复它,生成的代码如下所示:
<td><c:out value="${customer.notes}"/></td>
JSP 和我使用过的其他模板框架始终默认仅在特别请求时转义动态数据,并且默认情况下不转义。
与此相反显然是一个更安全的默认值,即。所有动态数据都被转义,除非你明确告诉框架不要。
有没有以这种方式工作的框架?改变未来的框架以这种方式运行是否存在重大问题?显然,您会承担转义数据的开销,这些数据可能不一定是用户控制的,但如果遇到性能问题,您可以在安全的地方禁用它。有什么我想念的吗?