2013-04-25 79 views
2

我开始编写一个与数据库一起工作的Python应用程序。阅读关于准备好的语句,我发现我应该如何写它们:Python准备好的语句容易受到SQL注入的影响

... 
strSQL = "select * from myTable where aField = $s" % (aValue) 
cursor.execute(strSQL) 
... 

我的问题是:这不容易SQL注入?如果是这样,我该如何预防呢?

谢谢

回答

4

您正在使用string formatting operator代替bound SQL parameters,所以你的代码确实是在SQL注入的风险(一旦你解决$s,这我认为是笔误)。

正确的形式是:

strSQL = "select * from myTable where aField = %s" 
cursor.execute(strSQL, [aValue]) 
+2

的OP,作为“模板'是'$ s'而不是'%s'。 – 2013-04-25 18:37:30

+0

谢谢你的回答。事实上,我正在使用'$ s'搞砸了。这是我在Python中的第一步,我试图在他们变得严肃之前纠正我的错误。 – Barranka 2013-04-25 19:11:05

1

你拥有它,绝对是这样!这里是你如何将“帮助”绕过SQL注入

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

传递值列表/元组上的光标,第二个参数甚至没有使用字符串格式化执行

相关问题