c++ - HP Fortify 分析结果,system() 命令注入(inject)

标签 c++ linux security

我正在尝试编写在 linux 命令行中调用命令的 c++ 代码,我正在使用 HP Fortify 检查代码中的漏洞。熟悉 HP Fortify 源分析器的人可以告诉我是否可以在 c++ 代码中使用 system() linux 调用而不会收到 HP Fortify 的低威胁警告(低:命令注入(inject):语义)?如果我对 system() 函数的输入进行硬编码,同时在调用中写出程序和/或文件的完整路径,是否仍然存在命令注入(inject)的威胁?我不明白给它输入比硬编码更安全的方法。我是否应该忽略 system() 函数并找到另一种方法从我的 c++ 代码调用命令到 linux 命令行?

编辑:我尝试使用 execv() 而不是 system() 来调用程序,但它仍然给我使用 execv() 的命令注入(inject)警告。

最佳答案

一句话“不”。

HP Fortify 语义分析器可在过程内检测功能和 API 的潜在危险使用。基本上是一个聪明的 GREP。所以它本质上只是在你的代码中寻找单词“system()”和“execv()”。它将它们评为“低”,因为它没有发现攻击者可以影响 system() 将使用的字符串命令的路径。

但是,如果代码将用户输入串联在传递给 system() 的字符串中,则数据流分析器应将其视为关键命令注入(inject)。

将低语义发现视为“傻瓜安全”;-)

关于c++ - HP Fortify 分析结果,system() 命令注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30134098/

相关文章:

c++ - 是否可以使用结构化绑定(bind)来分配类成员?

c++ - 访问另一个结构中的结构字段

javascript - Angular 6 : xyz. service.ts 运行客户端还是服务器端?暴露 API-URL/DB 密码?

java - 保护 Web 服务 : valid SSL key error "ValidatorException: PKIX path building failed"

iis-7.5 - 如何保护托管在 IIS 7.5 上的面向公众的 WCF 服务?

c++ - 错误 : expected initializer before ‘<’ token with indexed or iterated string

C++ 术语不会计算为采用 0 个参数线程套接字的函数

c++ - 如何使用 ofstream 打开文件以便其他用户可以追加/写入同一文件?

linux - 如何使用多个正则表达式在 Solaris 中查找文件

linux - 无法在 SuSe 上测试 REDIS