Язык программирования Python

Как избежать SQL-инъекций в Python при использовании psycopg2

В этой статье используется:

  • Python (Версия 3)
  • psycopg2

Что такое SQL-инъекция?

Это методика внедрения кода для атак на приложения, подключенные к базе данных, при которой вредоносные инструкции включаются в поле ввода данных.

Схема

Допустим, у нас есть веб-страница, на которой через текстовую форму пользователи могут оставлять комментарии.

В приведенном ниже фрагменте кода информация принимается и сохраняется.

def add_comments(content): conn = psycopg2.connect("dbname=yourdatabase") cursor = conn.cursor() cursor.execute("insert into comments values ('$s')" % content) conn.commit() conn.close()
Code language: JavaScript (javascript)

Где проблема в приведенном выше коде? Вы сможете ее найти?

Прежде чем выявлять и устранять проблему, давайте посмотрим в документации psycopg, о чем она нам говорит:

Перевод: документация предупреждает нас никогда, НИКОГДА не использовать объединение строк (+) или интерполяцию строк (%) для передачи переменной в строку SQL.

К чему это может привести?

Делая это таким образом (cursor.execute(“insert into comments values (‘$s’)” % content)). При использовании, например, кавычек или другого специального символа, код выдаст ошибку 500 (Internal Server Error), поскольку символ напрямую соединяется со строкой SQL, вызывая ее поломку.

Как это исправить?

Исправим наш код, чтобы решить проблему, согласно документации psycopg в рамке, выделенной зеленым цветом:

def add_comments(content): conn = psycopg2.connect("dbname=yourdatabase") cursor = conn.cursor() cursor.execute("insert into comments values ($s)", (content,)) conn.commit() conn.close()
Code language: JavaScript (javascript)

Итак, проблема решена, и мы защитили себя от SQL Injection.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *