我尝试了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实际上传递给数据库驱动程序的是什么?
如何查看此请求?

要查看正在运行的查询,您需要通过添加代码来设置日志记录:
并且可以看到,数据是通过绑定传输的,所以会被转义,不会有sql注入的危险: