用于查询 s3 存储桶的参数化 SQL 查询

parameratized SQL queries for queries to s3 buckets

提问人:Deena 提问时间:11/10/2022 更新时间:11/11/2022 访问量:127

问:

我在 s3 存储桶中有一个 CSV 文件,我正在使用 boto3 库访问它。我正在使用该函数以SQL语言查询文件。select_object_content

这是我的代码:

resp = self.s3_client.select_object_content(
    Bucket=S3_BUCKET_MAPPING,
    Key=S3_BUCKET_MAPPING_KEY,
    ExpressionType="SQL",
    Expression=f"SELECT * from s3object s where s.field = 'value'",
    InputSerialization={
        "CSV": {"FileHeaderInfo": "Use"},
        "CompressionType": "GZIP",
    },
    OutputSerialization={"JSON": {}},
)

我的问题是关于表达的:f"SELECT * from s3object s where s.field = 'value'"

  1. 当数据存储位于 S3 中而不是实际上的 SQL 数据库中时,SQL 注入是否是此类数据获取的问题?
  2. 如果 SQL 注入是一个问题,有没有办法像编写访问 SQL 数据库的代码一样参数化此表达式?到目前为止,我还没有找到任何可以提供帮助的东西。
python amazon-s3 boto3 sql 注入

评论


答:

0赞 Egret 11/11/2022 #1

s3 支持有限的 SQL 语法。只要您使用静态 SQL 或使用参数传递,s3 就应该正确处理参数。

当然,如果您开始从不受信任的字符串创建 SQL 表达式,您可能会遇到麻烦。但这里似乎并非如此。