代码之家  ›  专栏  ›  技术社区  ›  Seva Alekseyev

为了加强这一点,什么是验证整数?

  •  1
  • Seva Alekseyev  · 技术社区  · 8 年前

    我使用的是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. 数据从不受信任的来源进入应用程序。

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

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

    在本例中,该命令由中的ProcessStartInfo()执行 ccc。aspx。cs在28号线。

    从字面上看,有两种可能的输入值会导致流程开始(截至本文撰写之时)——2017年和2018年。如果If()语句不算作Fortify的验证,那么应该怎么做?

    编辑:最重要的是,除非你明确选择ASP。NET的ViewState完整性检查, DropDownList 不允许指定范围之外的值。考虑到这一点,我不明白为什么 SelectedValue 一个 下拉框 首先被视为不受信任的来源。

    1 回复  |  直到 8 年前
        1
  •  2
  •   SBurris    8 年前

    将其标记为假阳性,然后继续。

    我认为Fortify没有考虑数据类型。你是在从一个 string int ,进行验证,然后使用int值而不是原始值。因此,只要命令注入没有问题(在本例中)。

    --

    什么是验证?

    当涉及到Fortify时,什么构成验证和什么将使Fortify停止报告验证是有区别的。

    不幸的是,在某些情况下(据我使用Fortify 5年多以来所发现的情况),如果不为分析器编写一个自定义规则来指示某些方法正在清理数据,你就无法让它满意。