重构这段代码,使其不将污染的、用户控制的数据放在头中。

问题描述 投票:0回答:1

我想在我的HTTPHeader中添加自定义头,如下所示。

Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
    String headerName = headerNames.nextElement();
    if (headerName.equalsIgnoreCase("SampleHeader"){
        headers.add(headerName, request.getHeader(headerName));
    }
}

但我在运行声纳时发现了以下错误

"重构这段代码,使其不在头中放置污染的、用户控制的数据。"

我认为添加一个regex可以解决我的问题,但我有两个问题。

  1. 我需要写一个允许字母、数字和.、! - 但我无法创建一个。
  2. 我不确定使用一些regex是否能解决我的问题。
regex header sonarqube
1个回答
0
投票

这个问题是因为你在代码中使用一个头名("SampleHeader")来做一个逻辑决定。

用户提供的数据,如URL参数、POST数据有效载荷或Cookie,应始终被认为是不可信的和有污点的。记录污点数据的应用程序可能使攻击者能够注入破坏日志文件模式的字符。这可以用来阻止监视器和SIEM(安全信息和事件管理)系统检测其他恶意事件。

在这种情况下,如果我想愚弄你的程序,让你的程序添加一个新的头到 headers 列表,我只需要发送一个类似这样的curl。

curl -X GET http://localhost/your/path --header 'SampleHeader: someValue'  

这个问题可以通过在记录用户提供的数据之前对其进行消毒来缓解。

SonarQube想告诉你的是,你正在将你的逻辑暴露给客户端的输入。一个更好的解决方案是重构你的代码,不依赖客户端的特定头来执行一些操作。在没有看到更多的代码库之前,很难建议示例代码。

希望这能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.