我在扫描文件时遇到以下安全问题。
“在通常被认为是可信的上下文中使用受污染的数据“值”。由于可信数据可能未经验证或清理,因此该数据可能会以不安全的方式被错误使用。”
我尝试通过以下 3 种方式进行修复,但没有成功,因为重新扫描文件后,安全问题仍然显示在同一行中。
1) String value = request.getParameter(key);
if(value.matches("[0-9a-zA-Z_]+"){
if (key.startsWith("BOOKMARK"))
book.put(key, value);
else
session.setAttribute(key, value);
}
2) String value = request.getParameter(key);
ESAPI.validator().getValidInput("Value", value, "valuePattern", 100, false);
if (key.startsWith("BOOKMARK"))
book.put(key, value);
else
session.setAttribute(key, value);
}
3)String value = request.getParameter(key);
if (session.getAttribute(key) != null) {
if (key.startsWith("BOOKMARK"))
book.put(key, value);
else
session.setAttribute(key, value);
}
下面是代码片段,该行显示了安全问题。
session.setAttribute(键, 值);
private Bookmark cacheRequest(HttpServletRequest request) {
String key;
Bookmark book = new Bookmark();
HttpSession session = request.getSession();
Enumeration enumVar = request.getParameterNames();
System.out.println("after enumVar creation");
try {
while (enumVar.hasMoreElements()) {
key = (String) enumVar.nextElement();
String value = request.getParameter(key);
if (key.startsWith("BOOKMARK"))
book.put(key, value);
else
session.setAttribute(key, value); //flaw
}
} catch (java.lang.NegativeArraySizeException value) {
}
return book;
}
我预计这一行中不会出现来自 Http 请求的受污染“值”
session.setAttribute(key, value);
最佳答案
这里有两条路径:
1.) 输入验证,您在 #2 中的调用通过 ESAPI 验证进行了覆盖。 (不确定您要获取哪个 validator !)
2.) 移交给另一层。在这种情况下,您将其设置到 session 中,该 session 将保留在服务器上。成功解决此问题(以及其他类似问题,例如 SQL 注入(inject)或 XSS)所需的规则是跟踪您的数据路径,并在每次处理该数据时问自己:“这是否会传递给解释器?”
每次答案是"is"时,您都会转义该上下文的输入。就您而言,我还在代码中的哪些地方使用此 session 值?如果您随后将其传递给 SQL 查询,则可以使用 ORM 实用程序或PreparedStatements(如果您正在进行直接数据库访问)。在前端,如果该值将被交还给用户显示,您也需要转义以获取适当的上下文:如果您正在开发单页 Web 应用程序,您将需要针对 Javascript/JSON 进行编码,或者如果它是 ajax、XML/HTML 等。
简而言之,每当您的“信任边界”被跨越时,您都会被要求评估您的输入值是否被传递给解释器。如果是,则编码,如果否,则忽略。如果有帮助的话,请绘制应用程序拥有的所有解释器的图表,并确保每次交接都有一个策略。经过一点练习,这就会成为第二天性。
关于java - 如何修复Servlet中Coverity(类似于veracode的安全工具)中的 "Trust boundary violation -Security Issue"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58092928/