我正在阅读:http://docs.python.org/2/library/sqlite3.html
# Never do this -- insecure!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
为什么它不安全?没有理由在网上详细解释。
答案 0 :(得分:3)
考虑一下如果symbol
包含' OR '' = '
会发生什么 - 攻击者可以为查询插入完全任意的标准。如果您在同一个表中有关于其他客户帐户的信息,或者正在进行更新,则特别关注这一点。
答案 1 :(得分:0)
如果symbol
包含用户提供或不受信任的数据,则会创建SQL injection vulnerability。
为了安全起见,请务必这样做(正如您正在阅读的同一页中提到的那样):
symbol = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', symbol)
现在即使symbol
包含恶意数据,它也会被正确转义并且不会造成任何伤害,更糟糕的是查询不会返回任何结果。