为何PCRE正则解析常受限,能否绕回溯次数限制解析长尾词?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1555个文字,预计阅读时间需要7分钟。
目录+ 正则表达式是什么+ 回溯的过程是怎样的+ PCRE另一种错误的用法+ 修正方法+ 本次Code-Breaking Puzzles中我遇到了一道看似很简单的题目,将其代码简化如下:+ ?phpfunction is_php($data) { return preg_match('/\bphp\b/i', $data);}+ ?
目录
- 正则表达式是什么
- 回溯的过程是怎样的
- PCRE另一种错误的用法
- 修复方法
这次Code-Breaking Puzzles中我出了一道看似很简单的题目,将其代码简化如下:
<?php function is_php($data){ return preg_match('/<\?.*[(`;?>].*/is', $data); } if(!is_php($input)) { // fwrite($f, $input); ... }
大意是判断一下用户输入的内容有没有PHP代码,如果没有,则写入文件。这种时候,如何绕过is_php()函数来写入webshell呢?
这道题看似简单,深究其原理,还是值得写一篇文章的。
正则表达式是什么
正则表达式是一个可以被“有限状态自动机”接受的语言类。
“有限状态自动机”,其拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。
本文共计1555个文字,预计阅读时间需要7分钟。
目录+ 正则表达式是什么+ 回溯的过程是怎样的+ PCRE另一种错误的用法+ 修正方法+ 本次Code-Breaking Puzzles中我遇到了一道看似很简单的题目,将其代码简化如下:+ ?phpfunction is_php($data) { return preg_match('/\bphp\b/i', $data);}+ ?
目录
- 正则表达式是什么
- 回溯的过程是怎样的
- PCRE另一种错误的用法
- 修复方法
这次Code-Breaking Puzzles中我出了一道看似很简单的题目,将其代码简化如下:
<?php function is_php($data){ return preg_match('/<\?.*[(`;?>].*/is', $data); } if(!is_php($input)) { // fwrite($f, $input); ... }
大意是判断一下用户输入的内容有没有PHP代码,如果没有,则写入文件。这种时候,如何绕过is_php()函数来写入webshell呢?
这道题看似简单,深究其原理,还是值得写一篇文章的。
正则表达式是什么
正则表达式是一个可以被“有限状态自动机”接受的语言类。
“有限状态自动机”,其拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。

