要强化,验证整数的构成是什么?

时间:2018-08-02 18:24:55

标签: c# fortify

我正在将Fortify静态代码分析器用于C#/。NET项目。我从用户输入中获取一个整数参数,即一年,并以此为起点:

        int y = int.Parse(Year.SelectedValue); //Year is a DropDownList
        if (y >= 2017 && y <= DateTime.Today.Year)
            Process.Start(new ProcessStartInfo(Server.MapPath("~/bin/SomeProgram.exe"), "/x:" + y.ToString()));

Fortify不喜欢那样,会引发“命令注入”问题:

  
      
  1. 数据从不受信任的来源进入应用程序。
  2.   
     

在这种情况下,数据在ccc.aspx.cs中的get_SelectedValue()处输入   第25行。即使这种情况下的数据是数字,也是如此   未经验证,因此仍然被认为是恶意的,因此   该漏洞仍在报告中,但优先级值降低了。

     
      
  1. 数据用作表示应用程序执行的命令的字符串或作为字符串的一部分。
  2.   
     

在这种情况下,命令由ProcessStartInfo()在   ccc.aspx.cs在第28行。

从字面上看,有两个可能导致流程启动的输入值(截至撰写本文时)为2017年和2018年。如果if()语句不算作Fortify的验证,那会是什么?

编辑:最重要的是,除非您明确选择ASP.NET的ViewState完整性检查,否则DropDownList不允许超出指定范围的值。考虑到这一点,我不明白为什么SelectedValue中的DropDownList首先被视为不受信任的来源。

1 个答案:

答案 0 :(得分:2)

将其标记为误报并继续。

我不认为Fortify将数据类型考虑在内。您正在从stringint中取出值,进行验证,然后使用int值而不是原始值。因此,就命令注入而言(在这种情况下)不成问题。

-

什么是验证?

在Fortify方面,构成验证的内容与使Fortify停止对其进行报告的内容之间是有区别的。

不幸的是,在某些情况下(据我使用Fortify 5年以上的经验发现),如果不为分析器编写自定义规则以表明某种方法正在清除数据,就无法满足要求