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

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

от christine , в категории: Python , 3 месяца назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от brooklyn , 3 месяца назад

@christine 

В Python есть несколько способов защитить SQL запросы от атак SQL инъекций. Ниже описаны некоторые из них:

  1. Использование параметризованных запросов: Вместо вставки значений в SQL запросы непосредственно с помощью строковой конкатенации, рекомендуется использовать параметры. Библиотеки для работы с базами данных, например, psycopg2 (для PostgreSQL) или MySQLdb (для MySQL), позволяют создавать параметризованные запросы, где значения подставляются, обрабатываются и экранируются автоматически. Пример с использованием psycopg2: import psycopg2 conn = psycopg2.connect(database="mydb", user="myuser", password="mypassword", host="localhost", port="5432") cursor = conn.cursor() name = "John" age = 25 cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", (name, age)) conn.commit()
  2. Экранирование символов: Если невозможно использовать параметризованные запросы, то можно экранировать символы, которые могут вызвать SQL инъекцию. Например, в модуле MySQLdb есть функция escape_string(), которая может использоваться для экранирования специальных символов. Пример с использованием MySQLdb: import MySQLdb conn = MySQLdb.connect(host="localhost", user="myuser", passwd="mypassword", db="mydb") cursor = conn.cursor() name = "John'; DROP TABLE users;" age = 25 name = MySQLdb.escape_string(name) cursor.execute("INSERT INTO users (name, age) VALUES ('%s', %s)" % (name, age)) conn.commit()
  3. Использование ORM (Object-Relational Mapping): ORM-фреймворки, такие как SQLAlchemy или Django ORM, предоставляют абстракцию базы данных и обработку запросов безопасным способом. Они автоматически экранируют входные данные и предотвращают SQL инъекции. Пример с использованием SQLAlchemy: from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer) engine = create_engine('postgresql://myuser:mypassword@localhost:5432/mydb') Session = sessionmaker(bind=engine) session = Session() user = User(name='John', age=25) session.add(user) session.commit() Важно отметить, что безопасность SQL запросов - это только один аспект защиты приложения от атак SQL инъекций. Дополнительные меры безопасности должны быть реализованы, такие как контроль доступа, аутентификация пользователей и проверка валидности входных данных.