PCRE回溯

参考文章

条件

  • 非贪婪模式

demo

<?php
function is_php($data){  
    return preg_match('/<\?.*[(`;?>].*/is', $data);  
}

if(!is_php($input)) {
    // fwrite($f, $input); ...
}

exp

var_dump(preg_match('/union.+?select/is','union /*'.str_repeat('a', 10000000).'*/select'));

php限制了回溯的上限,其上限由php.ini的pcre.backtrack_limit定义。可以通过var_dump(ini_get('pcre.backtrack_limit'))查看当前环境的上限值。一旦正则匹配的回溯次数超过改值就会返回bool(false)

如果用preg_match对字符串进行匹配,没有使用===全等号来判断返回值。则可能出现绕过。

results matching ""

    No results matching ""