HP Fortify 路径操作验证规则

2024-01-13

我正在通过 Hp Fortify 运行代码,并有一些路径操纵的发现。我了解它的背景并试图解决。

我没有遍历从数据库查询某些路径值来存储输出文件(日志、导出数据等)的所有位置,而是尝试将其集中化。因此,我不想让 File.WriteAllText() 带有一些路径+文件名、内容,而是想包装成

FortifyFileWriteAllText()。然后,在这个函数中,我预先进行一次路径验证检查,如果有效,则只允许继续写入,例如......

public static bool FortifyFileWriteAllText( string fileToWrite, string content)
{
   if( ! MyPathValidationRoutine( fileToWrite ))
      return false;

   File.WriteAllText( fileToWrite, content );
   return true;
}

所以,我知道这是实际验证和防止错误写入的非常缩写,但我调用 Path.GetFullPath() 来防止任何此类情况..\..\..路径参考。然后查看最终路径,明确阻止诸如根 C:、C:\Windows 等内容,但也有一个“干净”的路径列表。

那么,我将如何应用一条规则,表明进入此例程的任何内容都是好的,并且已经明确检查过并且没问题。


如果你做得正确,fortify 数据流分析器将沿着你的数据路径进行跟踪,查看一些预期的函数(即 getCanonicalPath()、pattern.matcher() 等)并触发生成 TAINFLAG=VALIDATED_PATH_MANIPULATION 的接收器规则。然后数据流分析器看到这个特定的 TAINTFLAG,它将静音问题报告。这个过程是经过设计的。如果您实现了 FortifyFileWriteAllText() 函数,并且 Fortify 仍然抱怨,可能是因为 fortify 不喜欢您正在使用的方法。

如果您认为函数 FortifyFileWriteAllText() 确实阻止了 PM,这里是自定义接收器规则,可以为您创建 VALIDATED_PATH_MANIPULATION 污点标志。将其放入 ~FORTIFY_HOME/Core/config/rules 目录中使用。

<?xml version="1.0" encoding="UTF-8"?>
<RulePack xmlns="xmlns://www.fortifysoftware.com/schema/rules">
    <RulePackID>YOUR RULE PACK ANME HERE</RulePackID>
    <SKU>SKU-ANY THING HERE</SKU>
    <Name><![CDATA[ANY THING HERE]]></Name>
    <Version>1.0</Version>
    <Description><![CDATA[]]></Description>
    <Rules version="6.31">
        <RuleDefinitions>
            <DataflowSinkRule formatVersion="6.31" language="java">
                <MetaInfo>
                    <Group name="MyCompany">Path Manipulation Remediation</Group>
                    <Group name="Accuracy">4</Group>
                    <Group name="Impact">3</Group>
                    <Group name="RemediationEffort">3</Group>
                    <Group name="Probability">4</Group>
                    <Group name="audience">targeted,medium,broad,dev,fod</Group>
                </MetaInfo>
                <RuleID>put-your-rule-id here-with-prefix-for-future-statistics</RuleID>
                <VulnKingdom>Input Validation and Representation</VulnKingdom>
                <VulnCategory>Path Manipulation</VulnCategory>
                <DefaultSeverity>3.0</DefaultSeverity>
                <Description ref="desc.dataflow.java.path_manipulation">
                    <Explanation append="true"><![CDATA[This issue is being reported by "your rule name here".]]></Explanation>
                </Description>
                <Sink>
                    <InArguments>this</InArguments>
                    <Conditional>
                        <Not>
                            <TaintFlagSet taintFlag="VALIDATED_PATH_MANIPULATION"/>
                        </Not>
                    </Conditional>
                </Sink>
                <FunctionIdentifier>
                    <NamespaceName>
                        <Pattern>com.yourpackage</Pattern>
                    </NamespaceName>
                    <ClassName>
                        <Pattern>yourclass</Pattern>
                    </ClassName>
                    <FunctionName>
                        <Pattern>FortifyFileWriteAllText</Pattern>
                    </FunctionName>
                    <ApplyTo implements="true" overrides="true" extends="true"/>
                </FunctionIdentifier>
            </DataflowSinkRule>
        </RuleDefinitions>
    </Rules>
</RulePack>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HP Fortify 路径操作验证规则 的相关文章

  • 从实体获取单列

    如何从查询中获取单个列而不是整个对象 我可以这样做来获取整个对象 但我想要的只是名称 IList
  • 在 Web 浏览器中禁用 F5 [重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器的后退按钮 https stackoverflow com questions 961188 disable browsers back button 如何禁用浏览器上的 F5 刷新 htt
  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得
  • EventHandler 应该始终用于事件吗?

    我一直在愉快地使用自定义委托类型和通用编写事件Action委托类型 没有真正考虑我在做什么 我有一些很好的扩展助手Action and EventHandler这使我倾向于使用那些预定义的委托类型而不是我自己的委托类型 但除此之外 除了惯例
  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • libtool 在 Ubuntu 13.04 上构建 thrift 0.9.1 时出错

    在 Ubuntu 13 04 上构建 thrift 0 9 1 支持 C C java C perl python 时出现此错误 configure 不带任何选项运行 make 不带任何选项运行 Making all in test mak
  • C# Outlook 从收件人获取 CompanyName 属性

    我目前正在使用 C 编写 Outlook 2010 AddIn 我想要的是从我从 AppointmentItem 中提取的 Recipient 对象中获取 CompanyName 属性 因此 有了 AppointmentItem 的收件人
  • C++中的类要具备什么条件才能成为容器?

    我是 C 编程新手 偶然发现了这个术语containers举例如下vector deque map etc 一个企业的最低要求应该是什么class应该满足被称为container in C 我将从 范围 这个概念开始 Range 只有两个方
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 在 C 语言中替换宏内的宏

    我正在尝试使代码部分可重用 我下面的评论片段没有达到我想要的效果 define NAME ABC define LOG SIZE NAME LEN 我想LOG SIZE决心ABC LEN 我尝试过使用 但没能让它发挥作用 LOG SIZE在
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 将日期时间显示为 MM/dd/yyyy HH:mm 格式 C#

    在数据库中 日期时间以 MM dd yyyy HH mm ss 格式存储 但是 我想以 MM dd yyyy HH mm 格式显示日期时间 我通过使用 String Format 进行了尝试 txtCampaignStartDate Tex
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • MSVC编译器下使用最大成员初始化联合

    我正在尝试初始化一个LARGE INTEGER在 C 库中为 0 确切地说是 C 03 以前 初始化是 static LARGE INTEGER freq 0 在 MinGW 下它产生了一个警告 缺少成员 LARGE INTEGER Hig
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • couchdb 的高级权限

    我们有一个包含多个用户和复杂的权限系统的 couchapp 应用程序 我们的模型有两种 Foo 和 bar 用户对自己的 Foo 和 Bar 拥有管理员访问权限 并且可以被授予查看 更改和删除其他人的 Foo 和 Bar 的权限 Examp
  • glu.h 问题!

    好的 我在 Windows 7 上设置 Visual studios C 10 这样我就可以运行 OpenGL superible 第五版 这本书中的示例程序 但我在使用 GLTools 和 freeglut 时遇到了一些重大问题 到目前为
  • 带上标指数的科学记数法

    I m attempting to format numbers in scientific notation with exponents of base 10 e g write 0 00123 as 1 23x10 3 using p
  • 连接到 Azure 存储帐户时出现 404 错误

    我正在浏览此处找到的带有天蓝色存储帐户的 blob 教程Azure 存储教程 http www windowsazure com en us develop net how to guides blob storage upload blo
  • 如何在运行时动态创建/修改 Angular 9 项目结构中的 sitemap.xml 文件?

    如何在 Angular 9 项目结构中创建动态 sitemap xml 文件 我可以使用来自节点 API 的 HTTP get 请求获取数据 但是使用此数据如何在运行时从 Angular 项目更新本地 xml 文件 就我而言 角度项目和节点
  • 单独使用 CSS,如何实现从右到左的 Border-bottom 渐变?

    我想知道是否可以单独使用 CSS 来制作边框底部 渐变从右到左而不是从中心向外 在寻找答案的过程中 我发现了一个JSFiddle http jsfiddle net necolas vqnk9 链接显示可以有一个从上到下透明的边框渐变 方法
  • 通过将 git 变更集传输为 tarball 来模拟“气隙”系统的“git pull”

    我需要将 git 存储库同步到 气隙 系统 在系统上创建镜像环境 文件必须通过专门批准的渠道传输 新代码在被允许进入系统之前还必须经过漫长的审查和批准过程 代码开发得很快 我想每周同步特定分支 就像我只是执行 git pull 一样 重新传
  • AS3 中的多维数组排序

    在 AS3 中进行多重排序的最简单方法是什么 类似于 PHP 中的 array multisort 如下所示 使用 array multisort 对多维数组进行排序 https stackoverflow com questions 53
  • 代码高尔夫:钻石图案

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 挑战 根据输入输出菱形图案的字符数最短代码 输入由 3 个正数组成 分别代表菱形的大小和网格的
  • 如何复制一行数据,并以偏移量粘贴它

    我正在处理一个 Excel 2010 工作表 其中包含一些医生的姓名及其地址 但经常有 2 个姓名相同但地址不同 在这种情况下 我想将地址信息复制到与名字相同的行 但偏移量为 4 列 这是我想出的代码 Sub OraganizadorEnd
  • bash read -d '' 的作用是什么?

    a 是什么意思 d 在 bash 读取命令中做什么 该示例直接来自以前的SO https stackoverflow com questions 15429330 how to specify a multi line shell vari
  • 在 Python 中如何使用函数(回调)作为另一个函数的参数?

    假设我有一些代码 例如 def myfunc anotherfunc extraArgs somehow call anotherfunc here passing it the extraArgs pass 我想传递另一个现有函数作为an
  • 将 List 从 actionlink 传递到控制器方法

    在我的控制器中我有这个 ViewBag lstIWantToSend lstApps Select x gt x ID ToList creates a List
  • SQL Server 中将signed int 转换为字符串ip 地址

    我正在从 SQL Server 数据库检索一个带符号的 int 并且需要将其转换为 正常 外观的点字符串以向用户显示 谷歌搜索 我发现了这段代码 SELECT dbo IPADDRESS IPADDRESS CAST ROUND cast
  • 为什么 NHibernate.Cache.HashtableCacheProvider 不适合生产使用?

    The NHibernate 文档 http nhforge org doc nh en index html performance cache和书NHibernate 实际应用 https rads stackoverflow com
  • 继承默认构造函数在 gcc 中失败,但在 clang 中有效,哪个有 bug?

    举这个简单的例子 struct Base Base Base defined by the compiler struct Derived Base using Base Base Should inherit Base Base Deri
  • 为什么 Windows Azure 诊断不能可靠地记录日志?

    我们在使 Windows Azure 诊断可靠地记录日志时遇到问题 这似乎是偶然的 我们不明白为什么 这是我们的代码 有时有效 有时无效 public class WorkerRole RoleEntryPoint public overr
  • android ViewPager可定制

    我需要实现一个滚动视图 如下所示 也就是说 在 空闲 状态下 图像 1 以全尺寸可见 而图像 2 部分可见 从而向用户提供他可以滚动内容的线索 滚动后 滚动视图不得停留在中间状态 并且滚动必须完成 就像 iOS 的滚动视图在 启用分页 打开
  • Terraform 可选 jsonencode 属性

    好的 获取以下 terraform 片段 variable my var1 type string default null variable my var2 type string default null output my out v
  • HP Fortify 路径操作验证规则

    我正在通过 Hp Fortify 运行代码 并有一些路径操纵的发现 我了解它的背景并试图解决 我没有遍历从数据库查询某些路径值来存储输出文件 日志 导出数据等 的所有位置 而是尝试将其集中化 因此 我不想让 File WriteAllTex