修复pandas.read_SQL()中的Bandit SQL注入问题

2024-06-10 01:45:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从事一个项目,该项目中有许多用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,))

我跟随了this blog,但是我可能无法使用来自psycopg2cursor对象。因此,需要一些可以帮助设置字符串格式和插值的东西,因为我将能够在pandas库中使用它


Tags: 项目字符串namefrompandasdfreadsql