仅使用 replaceAll( "r" , "_" ).replaceAll( "n" , "_" ) 传递 Veracode CWE 117(日志的不正确输出中和)



我在某些论坛上阅读了一个神话,即通过执行类似的操作来传递Veracode CWE 117(对日志的输出中和不正确)。有人可以确认是否是这种情况吗?

 message.replaceAll("r", "_").replaceAll("n", "_");

在此主题中如何修复Veracode CWE 117(对日志的输出中和不正确),我知道我需要做这样的事情

ESAPI.encoder().encodeForHTML(message);

您可以使用 stringscapeutils 的方法通过Veracode中的CWE-117。我能够通过2.6 Commons-lang https://mvnrepository.com/artifact/commons-lang/commons-lang/2.6

通过CWE-177。
StringEscapeUtils.escapeJava(message)

需要在其所处的上下文中逃脱消息。ESAPILOGGER确实替换了rn字符,并为HTML编码。

目前,此代码为我提供了VeraCode的CWE 117:

log.log(Level.WARNING, System.getenv("unsafe"));

此代码没有:

log.log(Level.WARNING, ESAPI.encoder().encodeForHTML(System.getenv("unsafe")));

encodeforhtml分别编码rn分别为
,但是下划线是IMHO清洁器,如果您解码HTML,则可能会获得意外的新行。

如果您不想直接使用esapi,则可以编写自己的功能,从而可以做类似的事情:

  • 逃脱新线条和
  • 编码HTML。

我在此处给出了此类功能(基于ESAPI)的示例:安全缺陷 - VeraCode报告-CRLF注入

我们可以。

message.replaceAll("r", "_").replaceAll("n", "_");

ESAPI.encoder().encodeForHTML(message);

HtmlUtils.htmlEscape(input)

最新更新