首页 > 解决方案 > postgres COPY tablename FROM STDIN with csv 是否存在 SQL 注入的风险?

问题描述

我正在使用 python 和 pyscopg2。

如果我在下面运行代码,用户提供的 csv 文件将被打开和读取。然后将包含在 csv 文件中的内容传输到数据库中。
我想知道当 csv 文件中包含一些意外的单词或符号时,代码是否存在 SQL 注入的风险。

conn_config = dict(port="5432", dbname="test", password="test")
with psycopg2.connection(**conn_config) as conn:
    with conn.cursor() as cur:
        with open("test.csv") as f:
            cur.copy_expert(sql="COPY test FROM STDIN", file=f)

看了一些psycopg2和postgres的文档,没有找到结果。
请知道英语不是我的母语,我可能会犯一些令人困惑的错误

标签: pythonpostgresqlsecuritypsycopg2

解决方案


该命令只是将数据复制到表中。复制数据的任何部分都不能被解释为 SQL 命令,因此 SQL 注入是不可能的。额外的安全性是严格的 CSV 格式。如果数据包含额外(冗余)写入,该命令将简单地失败。命令操作的唯一风险可能是表中的奇怪内容。


推荐阅读