Защита от SQL-инъекций в python

У меня есть код на Python, который устанавливает значение char(80) в БД sqlite.

строка получается непосредственно от пользователя через поле ввода текста и отправляется обратно на сервер с помощью метода POST в структуре JSON.

на стороне сервера я в настоящее время передаю строку методу, вызывающему операцию обновления SQL.

это работает, но я знаю, что это не безопасно вообще.

Я ожидаю, что клиентская сторона небезопасна в любом случае, поэтому любой защита должна быть установлена на стороне сервера. Что я могу сделать, чтобы защитить операцию обновления от SQL-инъекции?

функция, которая "цитирует" текст, чтобы он не мог запутать синтаксический анализатор SQL, - это то, что я ищу. Я ожидал, что такая функция существует, но не смог ее найти.

Edit: Вот мой текущий код, устанавливающий метку имени Поля char:

def setLabel( self, userId, refId, label ):
    self._db.cursor().execute( """
        UPDATE items SET label = ? WHERE userId IS ? AND refId IS ?""", ( label, userId, refId) )
    self._db.commit()

3 ответов


из документации:

con.execute("insert into person(firstname) values (?)", ("Joe",))

Это выходит "Joe", Так что вы хотите

con.execute("insert into person(firstname) values (?)", (firstname_from_client,))

DB-API .execute() поддерживает подстановку параметров, которая позаботится о побеге для вас, упомянутой в верхней части документов;http://docs.python.org/library/sqlite3.html выше никогда не делайте этого -- небезопасной.


Неееет... ИСПОЛЬЗУЙТЕ ПЕРЕМЕННЫЕ BIND! Для этого они и существуют. См.этой

другое название техники -параметризованный sql (Я думаю, что "переменные Привязки" могут быть именем, используемым с Oracle специально).