Python 准备好的语句是否容易受到 SQL 注入攻击

Bar*_*nka 2 python

我开始编写一个与数据库一起使用的 Python 应用程序。阅读有关准备好的陈述时,我发现了应该如何编写它们:

...
strSQL = "select * from myTable where aField = $s" % (aValue)
cursor.execute(strSQL)
...
Run Code Online (Sandbox Code Playgroud)

我的问题是:这是否容易受到 SQL 注入攻击?如果是这样,我该如何预防?

谢谢

NPE*_*NPE 5

您使用的是字符串格式化运算符而不是绑定的 SQL 参数,因此您的代码确实面临 SQL 注入的风险(一旦修复了$s,我认为这是一个拼写错误)。

正确的形式是:

strSQL = "select * from myTable where aField = %s"
cursor.execute(strSQL, [aValue])
Run Code Online (Sandbox Code Playgroud)

  • OP 甚至没有使用字符串格式,因为使用的“模板”是“$s”而不是“%s”。 (2认同)