Zil*_*ilk 3 php regex postgresql pcre escaping
我正在创建一个与~or匹配的正则表达式模式~*,其中部分模式由应用程序创建,部分来自用户输入:
$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");
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是有效的,但我不完全确定它的安全性:
preg_quote()转义(至少)PostgreSQL 正则表达式中的所有特殊字符?$userInput值可以破坏转义?(在$userInput到达这个阶段之前有一些通用的处理- 编码、字符集、接受的字符范围等。查询参数用于大多数(实际)查询,但这部分 SQL 是手动创建的。)
是的。从docs,~并~*使用 POSIX 正则表达式,这意味着这些字符被特殊处理:
()[]{}^$|?:.\
Run Code Online (Sandbox Code Playgroud)
preg_quote,从文档中,只是盲目地通过并放置一个反斜杠(即转义)所有这些字符:
.\+*?[^]$(){}=!<>|:-
Run Code Online (Sandbox Code Playgroud)
换句话说,它转义了所有需要转义的字符。
但是,您仍然应该小心。如果您决定使用LIKE或SIMILAR TO在将来的某个时间点,_并且%不会被转义。此外,您必须记住不要使用不同的转义字符;如果你这样做了,所有仔细的验证都会消失,你会得到许多奇怪的错误。
| 归档时间: |
|
| 查看次数: |
655 次 |
| 最近记录: |