psychopg2:cursor.mogrify能防止SQL注入吗?

4
我正在阅读这个SO问题:psycopg2:insert multiple rows with one query,我发现其中包含了一个使用cursor.mogrify来加速一系列sql插入的优秀答案。这让我想知道,cursor.mogrify是否能成功地避免所有的SQL注入漏洞?
Alex Riley发布的答案代码如下:
args_str = ','.join(cur.mogrify("(%s,%s,%s,%s,%s,%s,%s,%s,%s)", x) for x in tup)
cur.execute("INSERT INTO table VALUES " + args_str) 

有人知道使用psychopg2的cursor.mogrify方法并在cursor.execute函数中使用字符串插值的这种方法存在哪些漏洞吗?

1个回答

5

psycopg2 并不使用服务器端预处理语句和绑定参数。它实际上通过字符串插值执行所有查询,但是它小心地遵守引用规则并以安全的方式执行。

cursor.mogrify 实际上只是手动调用 psycopg2 在将参数插入 SQL 字符串之前所使用的完全相同的逻辑而已。

这是安全的。只需确保您的代码有注释说明为什么要使用它以及为什么它是安全的。

然而,我个人建议避免使用此方法,而是使用其COPY支持


1
我觉得这是可以的,但非常感谢您进行检查,谢谢! - Lionel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接