Как просмотреть выполняемый запрос, сгенерированный peewee?
Попробовал провести sql-инъекцию, но результата не было. Но если вывести запрос, то он рабочий.
Подготовил код для тестирования:
from peewee import *
db = SqliteDatabase('people.db')
class Person(Model):
name = CharField()
class Meta:
database = db
db.connect()
db.create_tables([Person])
for i in range(5):
Person(name=f'name_{i+1}').save()
query = Person.select().where(Person.name == "123' or '1' = '1")
print(query)
print(len(list(query)))
Результат:
SELECT "t1"."id", "t1"."name" FROM "person" AS "t1" WHERE ("t1"."name" = '123' or '1' = '1')
0
Как видно, запрос валидный, но ничего не вернуло.
Попробуем выполнить этот же запрос:
Запрос валидный.
Так что же на самом деле peewee передает драйверу базы данных?
Как посмотреть этот запрос?
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Чтобы увидеть выполняемые запросы, нужно установить логирование, добавив код:
import logging
logger = logging.getLogger('peewee')
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
И как видим, данные передаются через биндинг, поэтому будет экранировано и не будет опасности sql-инъекции:
SELECT "t1"."id", "t1"."name" FROM "person" AS "t1" WHERE ("t1"."name" = '123' or '1' = '1')
0
('SELECT "t1"."id", "t1"."name" FROM "person" AS "t1" WHERE ("t1"."name" = ?)', ["123' or '1' = '1"])
