修复了pandas.read_sql()中Bandit SQL注入问题



我正在研究一个项目,该项目有很多正在用python运行的查询。当我执行强盗检查时,我看到了这个问题-

Test results:
>> Issue: [B608:hardcoded_sql_expressions] Possible SQL injection vector through string-based query construction.
Severity: Medium   Confidence: Low
Location: main.py:160
More Info: https://bandit.readthedocs.io/en/latest/plugins/b608_hardcoded_sql_expressions.html

这个问题在我使用原始SQL查询的所有地方都存在。

如何修改字符串插值来解决问题?

示例代码-

import pandas as pd
table_name = "orders"
df = pd.read_sql(sql=f'''
SELECT * FROM {table_name};
''')

我试过下列方法,但都不起作用。

import pandas as pd
table_name = "orders"
# Try 1
df = pd.read_sql(sql='''
SELECT * FROM {};
'''.format(table_name))
# Try 2
df = pd.read_sql(sql='''
SELECT * FROM %s;
''' %(table_name,))

我遵循这个博客,但我可能无法使用psycopg2中的cursor对象。因此,需要一些可以帮助字符串格式化和插值的东西,因为我将能够在pandas库中使用它。

如果你将cur.fetchall object转换为dataframe,那么它将工作

cur.execute("select instrument, price, date from my_prices")
df = DataFrame(cur.fetchall(), columns=['instrument', 'price', 'date'])

相关内容

  • 没有找到相关文章

最新更新