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

Python 如何更正此SQL代码以使其不易受攻击?,python,sql,security,sqlite,sql-injection,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]),

我在尝试重新格式化此代码时遇到问题,因此它不易受到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))

不,它与存储的参数无关。答案是简单地使用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
而不是
作为其占位符;但您仍然使用参数元组,而不是字符串替换。)