# Never do this -- insecure!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
# Do this instead
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
print c.fetchone()
我了解第一个选项容易受SQL injection attack攻击。我不明白的是为什么第二种选择会更安全。 Aren这些相同吗?
答案 0 :(得分:1)
否 - execute
方法将注意正确地转义参数。因此,如果t
为Robert'); DROP TABLE Students;--
,则在第二种情况下将传输到数据库引擎的完整命令将类似于
SELECT * FROM stocks WHERE symbol='Robert\'); DROP TABLE Students;--'
这是安全的(注意反斜杠)。
编辑:(实际上,请注意CL的评论)