我如何更正此SQL代码以使其不易受攻击?

时间:2015-04-09 14:35:12

标签: python sql security sqlite sql-injection

我无法尝试重新格式化此代码,因此它不容易受到SQL注入,任何提示?我知道它与你应该创建存储过程并从python中调用这些而不是动态构造SQL这一事实有关,但我不知道从哪里开始。感谢

handle[0].execute("insert into auditlog(userid, event, object)"
                  "  values({0}, '{1}', {2})".format(str(handle[2]),
                                             event, obj))
cursor.execute("select id, password from user where username='{0}'"
               .format(username))

1 个答案:

答案 0 :(得分:2)

不,它与存储的参数无关。答案只是使用DB-API的参数功能,而不是简单的字符串替换。

cursor.execute("insert into auditlog(userid, event, object) values(?, ?, ?)",
               (str(handle[2]), event, obj))

cursor.execute("select id, password from user where username=?"
               (username,))

(请注意,其他数据库的适配器,例如MySQL,令人困惑地使用%s而不是?作为占位符;但您仍然使用params元组,而不是字符串替换。)