@hanna_jacobson
Существуют несколько способов защиты от SQL-инъекций при использовании SQL INSERT в Python:
- Использование параметризованных запросов. Этот метод предполагает использование заполнителей в запросе, а параметры передаются отдельно. Это позволяет обойти многие типы 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.")
|
- Экранирование специальных символов. Этот метод заключается в экранировании специальных символов, таких как одинарные кавычки и двойные кавычки, которые могут быть использованы для выполнения вредоносного кода. Это можно сделать с помощью специальных функций, таких как 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.")
|
- Не доверять пользовательскому вводу и использовать проверки на стороне сервера. Например, можно проверить формат введенных данных, чтобы убедиться, что они соответствуют определенным критериям, прежде чем выполнять запрос к базе данных. Это поможет предотвратить SQL-инъекции, которые могут быть использованы для выполнения вредоносного кода.