首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止在php中注射regex?对于php的所有正则表达式函数,清理输入的一般规则是什么?

如何防止在php中注射regex?对于php的所有正则表达式函数,清理输入的一般规则是什么?
EN

Stack Overflow用户
提问于 2014-01-14 13:08:24
回答 4查看 1.8K关注 0票数 3

寻找关于我应该在正则表达式中转义哪些字符的提示,以防止利用。

e.g

正则表达式注入 PCRE函数preg_replace()函数允许一个“e”(PREG_REPLACE_EVAL)修饰符,这意味着替换字符串在替换后将被计算为PHP。因此,替换字符串中使用的不可信输入可以注入要执行的PHP代码。

或者在这里:http://hauser-wenz.de/playground/papers/RegExInjection.pdf

一般来说,对于sql注入,有许多指南和提示需要遵循,但无法找到关于regex注入的很多内容。

EN

回答 4

Stack Overflow用户

发布于 2014-01-14 13:13:11

简单的答案:改用preg_replace_callback() (它不依赖于用户代码的eval )。这就是PHP5.5建议您在使用/e时所做的事情。

代码语言:javascript
复制
$str = 'CAPS';
$str = preg_replace_callback('/[A-Z]/', function($match) { return strtolower($match[0]); }, $str);
echo $str;
票数 0
EN

Stack Overflow用户

发布于 2014-08-21 19:01:54

使用preg_quote引用正则表达式字符:

http://php.net/manual/en/function.preg-quote.php

您通常希望添加分隔符作为第二个参数。

例如:

代码语言:javascript
复制
$q = $_GET['q'];
$q = preg_quote($q, "/");
$replaced = preg_replace("/" . $q . "/", "42", "The quick brown fox jumps over the lazy dog");
票数 0
EN

Stack Overflow用户

发布于 2019-03-30 22:35:22

这是只读字母,它忽略了特殊字符:

函数sanitize_letter ($var) {

代码语言:javascript
复制
        $var= preg_replace("/[-[\]{}()*+?.,\\^<>&!@#$%^&\/':\";*()_+=$|#]/","",$var);

        return $var;
     }

这只是读取数字,它忽略了特殊字符:

函数sanitize_number ($var) {

代码语言:javascript
复制
        $var= preg_replace("/[^0-9]/","",$var);
        return $var;
     }

例如,如何使用上面的函数,

$pure_id=sanitize_number($_GET'id');

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21114365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档