我在项目中使用Sonarqube来检查代码质量。
我收到错误S4823 Using command line arguments is security-sensitive
这里有描述。https:/rules.sonarsource.comcsharpRSPEC-4823?search=using%20command.
这个错误是在我没有修改的代码中--它是在创建项目时自动生成的。
namespace WebApplication
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
我的应用程序在生产中运行了一段时间。它以OutOfProcess的形式托管在IIS后面。我想知道我是否可以安全地从ConfigureWebHostDefaults中删除args?
我不记得在任何地方设置了额外的参数,但也许在这个过程中,某些东西(IIS、Kestrel、系统...)设置了一些参数?在这种情况下,我应该接受Sonarqube的警告,还是做其他事情?
正如你在你的代码中可以看到的那样。args
被 Host.CreateDefaultBuilder()
这个方法可以创建一个默认配置的HostBuilder。你可以在 微软Github仓库.
当它不是空的时候,它被用作配置的数据提供者。其他默认的提供者是环境变量和 appsettings.{Environment}.json
和 appsettings.json。检查 https:/docs.microsoft.comen-usaspnetcorefundamentalsconfiguration?view=aspnetcore-3.1。
其中一些参数可以用于Kestrel(端口、超时等),因为你是在一个Web应用程序中。从 公文 :
进程外:
CreateDefaultBuilder
电话UseIISIntegration
到。
- 配置服务器在ASP.NET核心模块后运行时应监听的端口和基本路径。
- 配置主机捕获启动错误。
如果你检查源码上的 官方资料库你可以看到,参数(主机、端口等)是这样检索的。
var port = hostBuilder.GetSetting(ServerPort) ?? Environment.GetEnvironmentVariable($"ASPNETCORE_{ServerPort}");
文档中写道 GetSetting
读取配置中的值,所以它可以从 args
或环境变量作为后备。
由于我不确定IIS是使用命令行参数还是环境变量,所以你可以打印args和环境变量的值来检查哪些是IIS提供的。