Если я получаю данные постов с помощью Flask, помещаю эти данные в форму WTForms, и она успешно проверяется, безопасна ли она от атак SQL-инъекций? - PullRequest
5 голосов
/ 30 января 2012

Я использую Flask, WTForms и библиотеку OurSQL MySQL для своего приложения. Я получаю данные из переменной request.form. Я положил это в объект формы WTForms. Я вызываю validate() в этой форме, а затем вставляю данные формы в базу данных MySQL, используя OurSQL.

Без дополнительной обработки могу ли я защитить себя от внедрения SQL-кода? Способ WTForms validate экранирует? Если нет, что я должен сделать, чтобы избежать данных? Пример того, что я делаю, выглядит следующим образом:

form = MyWTFFormsForm(request.form)
if form.validate():
    cursor.execute("INSERT INTO mytable VALUES (?, ?, ?, ?, ?);",
            (form.field1.data, form.field2.data, form.field3.data,
             form.field4.data,
             form.field5.data))

Ответы [ 2 ]

5 голосов
/ 30 января 2012

Насколько я знаю, ни WTForms, ни Flask не экранируют данные для SQL, но использование заполнителей, как вы делаете, устраняет необходимость в экранировании.

2 голосов
/ 30 января 2012

Проверка формы и SQL являются отдельными проблемами.Работа по проверке формы заключается в том, чтобы убедиться, что данные имеют смысл.Задача кода SQL - безопасно хранить данные.Атаки SQL-инъекций в основном являются атаками на код, связанный с SQL.Предоставленный вами фрагмент с использованием заполнителей cursor.execute и ? будет правильно заключать в кавычки перед отправкой данных в SQL, поэтому нет возможности для внедрения SQL.

...