如何防止在 LIKE '%input%' 子句中注入 SQL?
How do I prevent SQL injection in a LIKE '%input%' clause?
我正在使用 SQLAlchemy 和 PostgreSQL,我需要生成一个类似
的语句
SELECT * FROM entities WHERE name LIKE '%input%';
LIKE 字符串的“输入”位来自用户。我希望用户能够包含文字 %
和 _
字符并使它们完全匹配,显然我需要确保查询不允许 SQL 注入。在 SQLAlchemy 中执行此操作的惯用方法是什么?我试过了
entities = session.query(Entity).filter(Entity.name.like('%:text%')) \
.params(text=user_input).all()
但这似乎没有用——它没有抱怨地执行但没有匹配应该匹配的行。
使用contains()
and autoescape=True
:
Entity.name.contains(user_input, autoescape=True)
给定 autoescape=True
SQLAlchemy 将建立转义字符并转义出现的 "%"
、"_"
和转义字符本身。您可以使用 escape=
参数显式控制转义字符。
我正在使用 SQLAlchemy 和 PostgreSQL,我需要生成一个类似
的语句SELECT * FROM entities WHERE name LIKE '%input%';
LIKE 字符串的“输入”位来自用户。我希望用户能够包含文字 %
和 _
字符并使它们完全匹配,显然我需要确保查询不允许 SQL 注入。在 SQLAlchemy 中执行此操作的惯用方法是什么?我试过了
entities = session.query(Entity).filter(Entity.name.like('%:text%')) \
.params(text=user_input).all()
但这似乎没有用——它没有抱怨地执行但没有匹配应该匹配的行。
使用contains()
and autoescape=True
:
Entity.name.contains(user_input, autoescape=True)
给定 autoescape=True
SQLAlchemy 将建立转义字符并转义出现的 "%"
、"_"
和转义字符本身。您可以使用 escape=
参数显式控制转义字符。