【发布时间】:2016-10-12 14:21:15
【问题描述】:
我正在创建一个与~ 或~* 匹配的正则表达式模式,其中部分模式由应用程序创建,部分来自用户输入:
$userInput = "t ' e * \\s * t ( i \n g";
$pattern = "(a|b|c)" . preg_quote($userInput) . "(x|y|z)";
$pattern = pg_escape_literal($conn, $pattern);
$result = pg_query($conn, "SELECT * FROM example WHERE name ~* $pattern");
到目前为止,这是可行的,但我不能完全确定它的安全性:
- PHP 的
preg_quote()是否会(至少)转义 PostgreSQL 正则表达式中的所有特殊字符? - 是否有任何可能的
$userInput值可以破坏转义?
($userInput 在到达此阶段之前有一些通用处理 - 编码、字符集、接受的字符范围等。查询参数用于大多数(实际)查询,但这部分SQL 是手动创建的。)
【问题讨论】:
标签: php regex postgresql escaping pcre