首页 > 解决方案 > 如何使用 pandas read_gbq 防止 SQL 注入

问题描述

我如何安全地使用 pandas_gbq.read_gbq 来防止 SQL 注入,因为我无法在文档中找到参数化它的方法

我查看了文档以参数化的方式以及谷歌网站和其他来源。

df_valid = read_gbq(QUERY_INFO.format(variable), project_id='project-1622', location='EU')查询的样子SELECT name, date FROM table WHERE id = '{0}'

我可以输入 p' 或 '1'='1 并且它可以工作

标签: pythonsqlpandasgoogle-bigquerysql-injection

解决方案


根据Google BigQuery docs,您必须使用带有SQL参数化语句的指定配置:

import pandas as pd

sql = "SELECT name, date FROM table WHERE id = @id"

query_config = {
    'query': {
        'parameterMode': 'NAMED',
        'queryParameters': [
            {
                'name': 'id',
                'parameterType': {'type': 'STRING'},
                'parameterValue': {'value': 1}
            }
        ]
    }
}

df = pd.read_gbq(sql, project_id='project-1622', location='EU', configuration=query_config)

推荐阅读