如何在LIKE'%input%'中阻止SQL注入?条款?

时间:2018-05-24 17:16:08

标签: python sql sqlalchemy sql-injection sql-like

我正在使用SQLAlchemy和PostgreSQL,我需要生成一个像

这样的语句
SELECT * FROM entities WHERE name LIKE '%input%';

LIKE字符串的“input”位来自用户。我希望用户能够包含文字%_字符并完全匹配,显然我需要确保查询不允许SQL注入。在SQLAlchemy中执行此操作的惯用方法是什么?我试过了

entities = session.query(Entity).filter(Entity.name.like('%:text%')) \
               .params(text=user_input).all()

但这似乎没有用 - 它没有投诉就执行了,但没有匹配应该匹配的行。

1 个答案:

答案 0 :(得分:2)

使用contains()autoescape=True

Entity.name.contains(user_input, autoescape=True)

给定autoescape=True SQLAlchemy将建立转义字符并转义"%""_"和转义字符本身的出现次数。您可以使用escape=参数显式控制转义字符。