提问人:JCollier 提问时间:10/5/2021 最后编辑:JCollier 更新时间:10/5/2021 访问量:160
Postgres:同时使用准备好的语句和字符转义是否足以避免恶意用户输入攻击?
Postgres: Is Using Both Prepared Statements and Character Escaping Sufficient to Avoid Malicious User Input Attacks?
问:
我假设如果我使用准备好的语句然后转义所有字符,任何用户抛出的输入都不会给我带来任何麻烦。但我知道有很多棘手的黑客,我对数据库不可穿透性的假设往往是错误的。这个问题假设我作为开发人员没有使用任何花哨的 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()
此外,让我们来看看我的脚本有一个简单的语句而不是一个语句的场景,如果这对我的问题的答案有任何影响的话。INSERT
SELECT
答: 暂无答案
评论