【问题标题】:Pyscopg2 SQL Injection security with LIKE clause带有 LIKE 子句的 Psycopg2 SQL 注入安全性
【发布时间】:2023-03-16 06:09:01
【问题描述】:

我必须进行一个查询,其中包含一个带有通配符“%”的 SQL LIKE 子句。它还有用户输入数据。

查询格式为:

SELECT * FROM my_table
WHERE x = <user_input>
AND y NOT LIKE '%abc%'

如何在 Python 的 psycopg2 模块中执行此操作?

以下代码不起作用:

cur.execute(
    """SELECT * FROM my_table
    WHERE x = %s
    AND y NOT LIKE '%abc%'
    """, (user_input,)
)

可能是因为LIKE 子句中的通配符。

关于我应该如何做到这一点的任何建议?提前致谢。

【问题讨论】:

标签: python sql postgresql psycopg2


【解决方案1】:

您可以简单地通过变量传递模式,例如:

pattern = '%abc%'

cursor.execute(
    """SELECT * FROM my_table
    WHERE x = %s
    AND y NOT LIKE %s
    """, (user_input, pattern)
)

或者,通过将模式中的 % 字符加倍来转义它们(因此函数不会将它们视为占位符):

cursor.execute(
    """SELECT * FROM my_table
    WHERE x = %s
    AND y NOT LIKE '%%abc%%'
    """, (user_input,)
)

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多