【发布时间】:2014-09-10 13:07:01
【问题描述】:
我想在我的网站上添加一个功能,让用户使用RegEx 搜索文本。但是,让用户做这样的事情安全吗?
preg_match('/' . $user_input_regex . '/', $subject);
【问题讨论】:
-
您可能需要使用preg_quote() 对其进行转义,如果用户输入是格式错误的正则表达式,则很难优雅地捕获错误
-
@MarkBaker 但是如果我用 preg_quote() 转义正则表达式字符,正则表达式将不起作用
-
@AnnonomusPenguin 用户提供的“regex2 可能包含 php 代码。
-
在这种情况下使用 preg_quote 转义用户正则表达式会适得其反,因为所有正则表达式符号都会被转义。这使得用户正则表达式无用,因为它将作为普通字符串处理 -> 不会发生正则表达式匹配。
-
@MarkBaker 有一个
filter_var(和filter_input)过滤器可以验证正则表达式:nz2.php.net/manual/en/filter.filters.validate.php
标签: php regex preg-match user-input code-injection