首页 > 其他分享 >利用PCRE回溯次数限制绕过安全限制

利用PCRE回溯次数限制绕过安全限制

时间:2023-08-20 16:55:26浏览次数:35  
标签:PCRE 匹配 正则表达式 回溯 攻击者 限制 绕过

第一部分:正则表达式和回溯基础

1、正则表达式概述 正则表达式是一种用于匹配字符串模式的工具。其在文本搜索、数据验证等方面具有强大的应用。在匹配的过程中,会使用有限状态自动机的概念,包括确定性有限状态自动机(DFA)和非确定性有限状态自动机(NFA)。

2、回溯的过程 正则引擎使用回溯来尝试所有可能的匹配方式,以找到一个满足条件的匹配结果。回溯的过程可能会在某些情况下引发性能问题,并且还有可能被攻击者利用来绕过安全限制。

3、PHP的pcre.backtrack_limit限制 PHP中的pcre.backtrack_limit参数用于限制正则引擎的回溯次数,以防止由于恶意构造的输入导致性能问题。然而,攻击者可以利用此特性来绕过某些安全限制,例如在某些情况下,让服务器消耗过多的时间来进行正则匹配。

第二部分:实战案例分析

例题一:绕过正则限制

1、回溯绕过步骤 在这个例子中,我们假设有一个正则表达式:/^(a+)+$/,它在一般情况下可以用来匹配连续的字母"a"。然而,由于回溯限制,它不能匹配过多的"a"。攻击者可以构造一个字符串,使得由于回溯次数过多,服务器会消耗过多的时间。

2、攻击者的思路和解决方案 攻击者可以构造字符串如:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!",通过这个字符串,攻击者可以让服务器在尝试匹配时陷入大量的回溯,从而导致服务器响应变慢甚至崩溃。为了解决这个问题,服务器应该设置合理的pcre.backtrack_limit值,同时避免在正则表达式中使用容易导致回溯的模式。

$pattern = '/^(a+)+$/';
$input = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!';
if (preg_match($pattern, $input)) {
echo "匹配成功!";
} else {
echo "无法匹配。";
}

标签:PCRE,匹配,正则表达式,回溯,攻击者,限制,绕过
From: https://www.cnblogs.com/EchoQ12/p/17644247.html

相关文章

  • [代码随想录]Day22-回溯算法part02
    题目:216.组合总和III思路:多加一个记录和的参数,还有一个起始位置的参数(不重复就得加)结束条件是个数到了k:如果此时sum==n那就说明答案正确如果此时sum!=n那就直接返回剪枝的话:如果之后的和大于n那就没必要继续遍历了代码:varres[][]int//答案varpath[]int......
  • [代码随想录]Day21-回溯算法part01
    题目:77.组合思路:回溯就是dfs的一个特殊情况也就是递归的一种情况,值得注意的一点:要记得深拷贝,不然最后全是空代码:varres[][]intvarpath[]intfunccombine(nint,kint)[][]int{res=[][]int{}path=make([]int,0,k)Combine(n,1,k,0)ret......
  • 海康机器人打造全新工业读码器,突破更多限制
    随着精密制造业的发展,条码喷印工艺越发精细,也对读码设备提出了越来越高的要求。由于工业读码的场景不同,读码的要求不同,普通读码器很难满足消费者的需求。作为行业专业的智能设备生产商,海康机器人近期推出了新一代工业读码器ID3000XM,为行业客户提供了更加便捷、高效、准确的读码......
  • 基础算法之搜索与回溯算法C++
    1、组合的输出【题目描述】排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。现要求你用递归的方法输出所有组合。例如n=5,r=3,所有组合为:12312412513413514523......
  • linux ssh限制ip白名单访问的两种方式
    第一种:sudovi/etc/ssh/sshd_config空白处添加#如果仅允许用户,不限制IPAllowUsersubuntu#仅允许特定用户特定[email protected]保存退出后执行sudoservicesshrestart第二种:sudovi/etc/hosts.deny添加sshd:ALL先禁止所有IP登录sudo......
  • IIS10上安装 限制连接数与流量限制模块
    流量限制模下载和安装安装完成后,可以在IIS管理工具里点击“BitRateThrottling”节点。根据你的文件及类型配置流量限制规则:以下白皮书是更多的一些帮助和内容:BitRateThrottlingModuleSetupBitRateThrottlingConfigurationWalkthroughBitRateThrottlingExte......
  • linux系统句柄限制调整,当使用netty/socket触发达到系统最大连接数时查看
    socket原理:客户端使用tcp端口连接至服务端,服务端会打开一个句柄文件和客户端保持连接,注意并不是一个连接就会占用一个服务器端口,所以socket连接数跟系统端口最大连接数无关,不然系统防火墙不就没啥用,默认系统每个进程打开的句柄是有限制的,另外整个系统还有一个句柄限制总数,所以soc......
  • 限制程序重复启动+全局异常捕获
    限制程序重复启动:boolnoAny;System.Threading.Mutexm=newSystem.Threading.Mutex(true,Application.ProductName,outnoAny);if(!noAny){MessageBox.Show("程序已在运行,禁止重复启动!","提示");System.Threading.Thread.Sleep(500);Environment.......
  • VTK 实例59:加入边界限制的三角剖分(表面重建)
    1#include<vtkAutoInit.h>2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkRenderingFreeType);4VTK_MODULE_INIT(vtkInteractionStyle);56#include<vtkSmartPointer.h>7#include<vtkProperty.h>8#include&......
  • Nginx 代理 MySQL 连接,并限制可访问IP
    1.前言我们的生产环境基本上都部署在云服务器上,例如应用服务器、MySQL服务器等。如果MySQL服务器直接暴露在公网,就会存在很大的风险,为了保证数据安全,MySQL服务器的端口是不对外开放的。好巧不巧,线上业务遇到bug了,开发的小伙伴需要远程连接MySQL来查看数据,那应该怎么办呢?我们可以通......