我无法尝试重新格式化此代码,因此它不容易受到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))
答案 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元组,而不是字符串替换。)