【问题标题】:How do I prevent SQL injection in a LIKE '%input%' clause?如何在 LIKE '%input%' 子句中防止 SQL 注入?
【发布时间】:2018-05-24 17:16:08
【问题描述】:

我在 PostgreSQL 中使用 SQLAlchemy,我需要生成类似的语句

SELECT * FROM entities WHERE name LIKE '%input%';

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

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

但这似乎不起作用——它毫无怨言地执行了,但没有匹配应该匹配的行。

【问题讨论】:

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


    【解决方案1】:

    使用contains()autoescape=True

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 2022-12-10
      • 1970-01-01
      • 2011-06-21
      • 2011-10-02
      相关资源
      最近更新 更多