2015-04-09 2 views
-1

У меня возникли проблемы с переформатированием этого кода, поэтому он не уязвим для SQL-инъекции, никаких намеков? Я знаю, что это связано с тем, что вы должны создавать хранимые процедуры вместо этого и вызывать их из python, а не динамически строить SQL, но я не знаю, с чего начать. СпасибоКак исправить этот код 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)) 

ответ

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 кортеж, а не строка подстановки.)

Смежные вопросы