SQLAlchemy 的 filer_by 功能可以防止 SQL 注入吗?
Does SQLAlchemy's filer_by function protect against SQL injection?
我想使用 SQLAlchemy filter_by 函数,但找不到 filter_by 函数转义输入以防止 SQL 注入的明确声明。我们的用法非常简单,但显然非常敏感。
self.database.active_session()
.query(Users)
.filter_by(
username=username,
is_active=1
).first()
我在哪里可以阅读更多关于 filter_by 函数的信息,或者谁能告诉我它是否转义了输入?
这是 postgresql 连接的输出
# trying to inject
query = db.query(User).filter_by(username="'user'; drop table user; --"")
print(query)
输出
SELECT "user".id AS user_id, "user".created_at AS user_created_at, "user".updated_at AS user_updated_at, "user".username AS user_username, "user".hashed_password AS user_hashed_password, "user".is_active AS user_is_active, "user".is_superuser AS user_is_superuser
FROM "user"
WHERE "user".username = %(username_1)s
字符串值作为参数传递给查询,因此您可以免受 SQL 注入。
我想使用 SQLAlchemy filter_by 函数,但找不到 filter_by 函数转义输入以防止 SQL 注入的明确声明。我们的用法非常简单,但显然非常敏感。
self.database.active_session()
.query(Users)
.filter_by(
username=username,
is_active=1
).first()
我在哪里可以阅读更多关于 filter_by 函数的信息,或者谁能告诉我它是否转义了输入?
这是 postgresql 连接的输出
# trying to inject
query = db.query(User).filter_by(username="'user'; drop table user; --"")
print(query)
输出
SELECT "user".id AS user_id, "user".created_at AS user_created_at, "user".updated_at AS user_updated_at, "user".username AS user_username, "user".hashed_password AS user_hashed_password, "user".is_active AS user_is_active, "user".is_superuser AS user_is_superuser
FROM "user"
WHERE "user".username = %(username_1)s
字符串值作为参数传递给查询,因此您可以免受 SQL 注入。