在我的代码上执行Vera代码扫描后,报告了一个缺陷,指出" HTTP标头中CRLF序列的中和不正确("HTTP 响应拆分 - CWE ID 113"(在以下代码上。如何修复此代码。
public void writeCookies() {
for (final Cookie cookie : cookies) {
super.addCookie(cookie);
}
在这里,我尝试在HttpServletResponseWrapper对象上添加Cookie。报告的缺陷代码是super.addCookie(cookie(。如何摆脱这一发现。请帮忙。
若要防止 HTTP 响应拆分攻击,可以使用 OWASP 编码器库清理代码中的 cookie 值。首先,将以下包添加到您的 Gradle 项目中:
implementation 'org.owasp.encoder:encoder:1.2.3'
如果您使用的是 Maven,请将以下依赖项添加到pom.xml
文件中:
<dependency>
<groupId>org.owasp.encoder</groupId>
<artifactId>encoder</artifactId>
<version>1.2.3</version>
</dependency>
然后,在 Java 代码中,从org.owasp.encoder.Encode
类导入forJava()
方法:
import org.owasp.encoder.Encode.forJava;
接下来,使用以下代码清理 cookie 值,然后再将其添加到响应中:
public void writeCookies() {
for (final Cookie cookie : cookies) {
// Sanitize the cookie value to remove CRLF characters
String sanitizedValue = forJava(cookie.getValue());
// Create a new cookie with the sanitized value
Cookie sanitizedCookie = new Cookie(cookie.getName(), sanitizedValue);
sanitizedCookie.setPath(cookie.getPath());
sanitizedCookie.setDomain(cookie.getDomain());
sanitizedCookie.setMaxAge(cookie.getMaxAge());
sanitizedCookie.setSecure(cookie.getSecure());
sanitizedCookie.setHttpOnly(cookie.isHttpOnly());
super.addCookie(sanitizedCookie);
}
}
此代码循环遍历每个 Cookie,使用forJava()
方法清理值,并使用清理值创建一个新 Cookie。然后,使用super.addCookie()
将新 cookie 添加到响应中。