我们有一个Flask/ML应用程序,它在训练时接受用户输入。在生产时,它跳过接受用户输入,而是从steps.ob文件中读取。
但是,Checkmarks仍将此标识为潜在的SQL注入漏洞。
for i in range(0, n):
ele = input("Enter column name (one at a time): ")
cols_drop.append(ele) # adding the element
X = df.drop(cols_drop,axis='columns')
是否有解决此漏洞的短期解决方案?(在生产中,由于我们提供steps.ob文件,因此它不会接受用户输入,但checkmarx不会考虑存在if/else生产条件)
1条答案
按热度按时间4si2a6ki1#
静态分析不会通过值来执行代码,以查看采用了哪些逻辑分支。在Checkmarx的情况下,它正在进行数据流分析,因此将忽略
if/else
,并查看从用户交互input
到DB API的流。这意味着这是一个肯定的结果。您只需确定它是否可利用,因为(可能)在部署期间使用了补偿控件。如果报告了SQL注入,则可能是您的代码没有正确执行SQL参数绑定/清理,或者Checkmarx无法识别您用于SQL I/O的API。没有足够的代码来真正判断是否是这种情况,我根据您的问题内容做了一些假设。
我还相当肯定Checkmarx无法识别任何Pandas API,因此无法理解通过
steps.obs
文件进行的交互式输入。根据文件的放置方式以及防止攻击者潜在修改的方式,这可能是一个误报SQL注入。如果Pandas API被识别,该分析可能会看到文件输入并为您提供另一个SQL注入漏洞。好消息是这两个问题都可以通过正确的参数绑定来解决。
1.将其标记为不可利用
1.调整分析查询以识别任何源/汇/清理程序
Checkmarx通常可以帮助您优化查询。