Защита от 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 специально).