Как защитить sql insert от sql injection в python?

Пользователь

от hanna_jacobson , в категории: SQL , год назад

Как защитить sql insert от sql injection в python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от magdalen_kub , год назад

@hanna_jacobson 

Существуют несколько способов защиты от SQL-инъекций при использовании SQL INSERT в Python:

  1. Использование параметризованных запросов. Этот метод предполагает использование заполнителей в запросе, а параметры передаются отдельно. Это позволяет обойти многие типы SQL-инъекций, которые могут возникнуть при вставке пользовательских данных. Например:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import mysql.connector

db = mysql.connector.connect(
    host="localhost",
    user="username",
    password="password",
    database="mydatabase"
)

cursor = db.cursor()

sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
val = ("John Smith", "32")

cursor.execute(sql, val)

db.commit()

print(cursor.rowcount, "record inserted.")


  1. Экранирование специальных символов. Этот метод заключается в экранировании специальных символов, таких как одинарные кавычки и двойные кавычки, которые могут быть использованы для выполнения вредоносного кода. Это можно сделать с помощью специальных функций, таких как mysql.escape_string() или psycopg2.extensions.escape_string(). Например:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import mysql.connector

db = mysql.connector.connect(
    host="localhost",
    user="username",
    password="password",
    database="mydatabase"
)

cursor = db.cursor()

name = "John O'Connor"
age = 32

sql = "INSERT INTO users (name, age) VALUES ('{}', {})".format(mysql.escape_string(name), age)

cursor.execute(sql)

db.commit()

print(cursor.rowcount, "record inserted.")


  1. Не доверять пользовательскому вводу и использовать проверки на стороне сервера. Например, можно проверить формат введенных данных, чтобы убедиться, что они соответствуют определенным критериям, прежде чем выполнять запрос к базе данных. Это поможет предотвратить SQL-инъекции, которые могут быть использованы для выполнения вредоносного кода.