Postgres:同时使用准备好的语句和字符转义是否足以避免恶意用户输入攻击?

Postgres: Is Using Both Prepared Statements and Character Escaping Sufficient to Avoid Malicious User Input Attacks?

提问人:JCollier 提问时间:10/5/2021 最后编辑:JCollier 更新时间:10/5/2021 访问量:160

问:

我假设如果我使用准备好的语句然后转义所有字符,任何用户抛出的输入都不会给我带来任何麻烦。但我知道有很多棘手的黑客,我对数据库不可穿透性的假设往往是错误的。这个问题假设我作为开发人员没有使用任何花哨的 riff-raff,例如带有 C 样式转义的 PostgreSQL 字符串常量'

作为我的“万无一失”输入清理的示例,我有以下脚本(这个问题与脚本代码的语言无关,但作为参考,该代码片段在 Python 中使用该库):psycopg2

user_input = function_that_returns_user_input_string()

#replace any single quotes with two single quotes
modified_input = user_input.replace("'", "''")

cursor.execute(
    "PREPARE mystatement AS "
    "SELECT * FROM myschema.mytable WHERE mycolumn=$1;"
)
cursor.execute(
    f"EXECUTE mystatement ('{modified_input}');"
)

res = cursor.fetchall()
function_that_handles_data_and_does_etc()

有什么可以返回进行SQL注入或任何其他黑客攻击吗?如果是这样,怎么办?function_that_returns_user_input_string()

此外,让我们来看看我的脚本有一个简单的语句而不是一个语句的场景,如果这对我的问题的答案有任何影响的话。INSERTSELECT

python postgresql 准备语句 sql 注入 数据库安全性

评论

0赞 10/5/2021
使用准备好的语句,您根本不需要转义单引号。
0赞 jjanes 10/6/2021
@a_horse_with_no_name 即使是他做事的奇怪方式?

答: 暂无答案