gpt4 book ai didi

postgresql - 使用 psycopg cur.execute 创建 postgres 模式

转载 作者:行者123 更新时间:2023-11-29 14:19:34 26 4
gpt4 key购买 nike

我的 python 应用程序允许用户创建他们的命名模式。我需要一种方法来保护应用程序免受 sql 注入(inject)。

要执行的SQL读取

CREATE SCHEMA schema_name AUTHORIZATION user_name;

psycopg 文档(通常)建议像这样传递参数来执行

conn = psycopg2.connect("dbname=test user=postgres")
cur = conn.cursor()
query = 'CREATE SCHEMA IF NOT EXISTS %s AUTHORIZATION %s;'
params = ('schema_name', 'user_name')
cur.execute(query, params)

但这会导致带有单引号的查询失败:

CREATE SCHEMA 'schema_name' AUTHORIZATION 'user_name';
> fail

有没有办法删除引号,或者我应该只接受从架构名称中删除非字母数字字符并结束工作?后者看起来有点丑陋,但应该仍然有效。

最佳答案

要传递标识符,请使用 AsIs .但这暴露了 SQL 注入(inject):

import psycopg2
from psycopg2.extensions import AsIs

conn = psycopg2.connect(database='cpn')
cursor = conn.cursor()
query = """CREATE SCHEMA %s AUTHORIZATION %s;"""
param = (AsIs('u1'), AsIs('u1; select * from user_table'))
print cursor.mogrify(query, param)

输出:

CREATE SCHEMA u1 AUTHORIZATION u1; select * from user_table;

关于postgresql - 使用 psycopg cur.execute 创建 postgres 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34031599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com