PostgreSQL 中未验证用户输入的 LIKE 表达式的文字模式匹配
将用户输入与 PostgreSQL 中的 LIKE 模式进行匹配时,必须转义特殊模式字符(例如“_”和“%”)可确保字面匹配。 PostgreSQL 要求使用反斜杠 () 或使用 ESCAPE 子句定义的自定义转义字符来引用这些字符。
例如,要按字面匹配“rob”,您需要转义任何包含下划线或百分号。但是,这里存在一个潜在的陷阱:如果您的用户输入也包含反斜杠,那么它们也需要转义。这可能会变得复杂并导致错误。
服务器端解决方案
为了优雅地处理这个问题,您可以利用 PostgreSQL 的 Replace() 函数将特殊字符替换为它们的值逃脱版本。这种方法有几个优点:
例如,要按字面搜索“rob”,您可以使用以下查询:
SELECT * FROM users WHERE name LIKE replace(replace(replace(,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'
在此查询中:
结论
通过使用服务器端替换和自定义转义字符,您可以确保文字模式匹配在 PostgreSQL 中,LIKE 表达式用于未经验证的用户输入。这种方法非常稳健,避免了注入漏洞,并简化了代码。
以上是如何使用未经验证的用户输入在 PostgreSQL LIKE 表达式中实现文字模式匹配?的详细内容。更多信息请关注PHP中文网其他相关文章!