使用 Python 防止 BigQuery 中的 SQL 注入用于表名

乘风 python 202

原文标题Prevent SQL Injection in BigQuery with Python for table name

我有一个 Airflow DAG,它接受用户 fortable 的参数。

然后我在 SQL 语句中使用该值并在 BigQuery 中执行它。我担心自己暴露在 SQL 注入中。

这是代码:

sql = f"""
        CREATE OR REPLACE TABLE {PROJECT}.{dataset}.{table} PARTITION BY DATE(start_time) as (
            //OTHER CODE
        )
        """

client = bigquery.Client()
query_job = client.query(sql)

datasettable都通过气流通过,但我担心有人会通过:random_table; truncate other_tbl; --作为table参数。

我担心上面会创建一个名为random_table的表,然后截断现有的表。

有没有更安全的方法来处理这些通过参数传递的?

我查看了 BigQuery 中的参数化查询,但这些查询不适用于表名。

原文链接:https://stackoverflow.com//questions/71599796/prevent-sql-injection-in-bigquery-with-python-for-table-name

回复

我来回复
  • dnnshssm的头像
    dnnshssm 评论

    一般来说,您可能应该研究一下用户输入的清理/验证。这是在将输入传递给 BQ 查询之前完成的。

    使用 Python,您可以在用户输入中查找恶意字符串(如示例中的truncate)或使用正则表达式过滤例如包含--的输入。这些只是一些简单的例子。我建议您对该主题进行更多研究;您还会在 SE 上找到很多关于该主题的问题。

    2年前 0条评论