漏洞:Client ReDos From Regex Injection

漏洞描述:

扫描漏洞如下:


代码:

// In IE6, the hash fragment and search params are incorrect if the

    // fragment contains `?`.

    getSearch: function() {

      var match = this.location.href.replace(/#.*/, '').match(/\?.+/);

      return match ? match[0] : '';

    },

// Update the hash location, either replacing the current entry, or adding

    // a new one to the browser history.

    _updateHash: function(location, fragment, replace) {

      if (replace) {

        var href = location.href.replace(/(javascript:|#).*$/, '');

        location.replace(href + '#' + fragment);

      } else {

        // Some browsers require that `hash` contains a leading #.

        location.hash = '#' + fragment;

      }

    }


ReDoS(Regularexpression Denial of Service)
正则表达式拒绝服务攻击。开发人员使用了正则表达式来对用户输入的数据进行有效性校验,当编写校验的正则表达式存在缺陷或者不严谨时, 攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,造成服务器的服务中断或停止。

每个恶意的正则表达式模式应该包含:使用重复分组构造、在重复组内会出现、重复、交替重叠。

有缺陷的正则表达式会包含如下部分。

(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} | for x > 10
注意: 这里的a是个泛指。

一些实际业务场景中会用到的缺陷正则:

英文的个人名字
Regex: ^[a-zA-Z]+(([\'\,\.\-][a-zA-Z ])?[a-zA-Z]*)*$
Payload: aaaaaaaaaaaaaaaaaaaaaaaaaaaa!

Java类名
Regex: ^(([a-z])+.)+[A-Z]([a-z])+$
Payload: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

Email格式验证
Regex: ^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$
Payload: a@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

多个邮箱地址验证
Regex: ^[a-zA-Z]+(([\'\,\.\-][a-zA-Z ])?[a-zA-Z]*)*\s+<(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})>$|^(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})$
Payload: aaaaaaaaaaaaaaaaaaaaaaaa!

复数验证
Regex: ^\d*[0-9](|.\d*[0-9]|)*$
Payload: 1111111111111111111111111!

模式匹配
Regex: ^([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?\.){0,}([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?){1,63}(\.[a-z0-9]{2,7})+$
Payload: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

使用python来进行测试有缺陷的正则示例
$ python -c "import re;re.match('^[a-zA-Z]+(([\'\,\.\-][a-zA-Z ])?[a-zA-Z]*)*$', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa!')"

 


解决方案:

防范手段只能降低风险而不能百分百消除ReDoS这种威胁。

1.  降低正则表达式的复杂度, 尽量少用分组;

2.  严格限制用户输入的字符串长度(特定情况下)。

    对本次测试漏洞进行分析,似乎并不存在重复分组或嵌套分组的正则表达式,为了应对安全测试,建议解决方案如下:

方案1

使用{m, n}替代“*”、“+”等,限制匹配的字符数量,如:

var href = location.href.replace(/(javascript:|#).*$/, '');

修改为

var href = location.href.replace(/(javascript:|#).{0, 1000}$/, '');

方案2

使用字符串截取函数slice()或substring(),替代replace()函数,如:

var href = location.href.replace(/(javascript:|#).*$/, '');

修改为

var lochref = location.href;

var idxnum = lochref.indexof(“javascript:”);

if(idxnum == -1) idxnum = lochref.indexof(“#”);

var href = idxnum == -1? lochref : lochref.slice(0, idxnum + 1);


参考资料:

Regular expression Denial of Service - ReDoS 

浅析ReDoS的原理与实践

Location 对象

正则表达式基础

js字符串截取函数slice()、substring()、substr()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】mysql 、oracle中char和varchar以及varchar2的区别

mysql char是固定长度,varchar是可变长度的,varchar2是oracle特有的。 char定长存储,速度快,但是存在一定空间的资源浪费,适用于存储字段不是很大、对速度要求高的场合。速度快是因为在物理上是按照定长存储的,这样就…

WinCE Boot方式及 Bootloader架构概述

Bootloader的概念就是一个用于引导的loader,在系统上电的时候最先被运行,然后对硬件平台做最基本的初始化,最后把操作系统加载起来。不同的嵌入式操作系统都有自己的Bootloader,但是本质功能都是一样的。 在WinCE中用的最多的就是…

静物摄影用光技巧_摄影技巧:摄影如何用光?摄影大师总结的10点,非常受用!...

点击上方蓝字关注「摄影技巧入门教程」ID:sheying116找到右上角点击?... 设为星标/置顶 丨摄影技巧丨丨摄影入门丨丨摄影教程丨丨摄影图片丨摄影技巧:光线的运用在摄影中至关重要,但很多摄影新手却不知道该如何用光,今天我们就来…

Python如何创建相同值的数组/列表

题目要求 现在有这样的一个需求:创建一个数组或列表,列表中的所有值是相同的。 解决方法 找到两种解决方法,第一种是使用Python的基础语法,第二种是借助numpy包提供的函数实现。分别为大家进行介绍。 方法一:使用P…

【转】肺小结节就诊指南:4种CT的区别及如何选择?

又到医院体检的季节,胸外科医师又要忙着给本院同事看片子了。目前体检查出的早期肺癌越来越多,主要归功于CT检查的普及,相较于X-ray胸片,CT对肺内小结节,特别是小于1cm的结节诊断率更高。因此,要提高早期肺…

CTL_CODE说明

我们在说DeviceIoControl函数时其第二个参数dwIoControlCode就是由CTL_CODE宏定义的,下边我们可以了解一下CTL_CODE的内容。CTL_CODE:用于创建一个唯一的32位系统I/O控制代码,这个控制代码包括4部分组成:DeviceType(设…

修改Linux主机名和IP

问题描述 又到了例行的系统安全测试时间,公司部署的一套系统需要做安全测试了,首先要做主机渗透,显然不可能在正式环境直接测,于是就把几台服务器做了个镜像,作为测试环境。 现在问题是,测试环境的ip要修…

可以获得索引值码_搜索引擎优化最适合什么样子的工作?

有些人一直在学习搜索引擎优化,并一直想学习搜索引擎优化。这里是一个关于搜索引擎优化职位的简要介绍。1、 搜索引擎优化的位置是什么?随着电子商务产业的发展,搜索引擎优化的地位越来越重要。它主要负责优化网页的自然排名,这与…

【转】医学图像之DICOM格式解析

最近导师给安排了新任务,由于刚进入实验室,对于医学图像这一块还一知半解,所以就想分享一下有关医学常见影像的学习资料(尤其是dicom后缀的图像文件),欢迎大家一起交流。 目录 1.医学影像学的介绍 2.DICOM信息的简介 3.DICOM内…

DeviceIoControl的使用说明

应用程序和驱动程序的通信过程是:应用程序使用CreateFile函数打开设备,然后用DeviceIoControl与驱动程序进行通信,包括读和写两种操作。还可以用ReadFile读数据用WriteFile写数据。操作完毕时用CloseHandle关闭设备。我们比较常用的就是用Dev…

多元有序logistic回归分析_一文详述:观察性研究中的logistic回归分析思路

本文内容来自《中华流行病学杂志》2019年第40卷第8期,作者为冯国双教授,原题目为《观察性研究中的logistic回归分析思路》。将这篇文章分享给医咖会的伙伴们,希望大家能从领域大咖的见解中有所收获,指导医学研究之路。&#xff08…

CTL_CODE定义中Method的说明

我在上一篇中说明CTL_CODE的时候,其中CTL_CODE定义中有一个Method域,该域的功能意义是定义用于与在驱动程序中获取应用程序数据缓冲区的地址方式。如果你看了我前边的文章,你可以看到在DeviceIoControl的使用说明中对DeviceIoControl参数进行…

【转】禁用Chrome和Firefox中自动播放的动画GIF

动画GIF已经腐臭,并且在浏览时自动播放时可能会非常烦人。以下是如何阻止他们在Chrome和Firefox中自动播放。 禁用动画GIF Firefox 在地址栏中输入: about:config,然后按Enter。如果“这可能会使您的保修信息失效,请点击&#…

Python:Sklearn概述

文章来源:https://blog.csdn.net/algorithmPro/article/details/103045824 Sklearn (全称 Scikit-Learn) 是基于 Python 语言的机器学习工具。它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上,里面的 API 的设计非常好,所有对象的接口简单…

裤子尺码对照表eur40_欧洲40的尺码具体部位多少

展开全部根据服装bai尺码标准:欧码的du40码等于中zhi国尺码175/96A。172/96A,代表身高dao173-177cm,胸围94-98cm,腰内围76-80cm,A表示A型标准体型。容在国家标准GB/T1335中,女装上衣S号(小号)的号型是155/8…

wince下Gpio 驱动程序

【转】wince下Gpio 驱动程序 在WINCE下能够直接访问的都是虚拟地址,不能直接访问GPIO端口,因此我们首先需要将GPIO口的物理地址映射到虚拟地址上来。 分别使用VirtualAlloc和VirtualCopy这两个函数来完成映射! 这两个函数的原型: …

【转】CT层厚、层间距、层间隔的概念是什么,MRI的层厚、层间距、曾间隔是什么

CT层厚指扫描层的厚度。CT层间距指两个扫描层面中心之间的距离。CT层间隔指两层之间的距离。 做CT打比方就是把胡萝卜切成片,观察每片的结构。 那胡萝卜需要切多厚呢?这个葫芦卜片的厚度就是这个扫描层厚。当然切得越薄看得越细,但人体承受的…

内存参数 计算_Spark统一内存管理的实现

本文从源码角度分析spark统一内存管理的实现原理。统一内存管理对象的创建统一内存管理对象在SparkEnv中进行创建和管理,这样内存管理就在Driver和Executor端中都可以使用。在SparkEnv的create函数中,创建内存管理对象的实现代码如下:val use…

Python:以鸢尾花数据为例,介绍决策树算法

文章参考来源: https://www.cnblogs.com/yanqiang/p/11600569.html https://www.cnblogs.com/baby-lily/p/10646226.html https://blog.csdn.net/liuziyuan333183/article/details/107399633 决策树算法 决策树算法主要有ID3, C4.5, CART这三种。 ID3算法从树的…

VirtualAlloc和VirtualCopy的蕴含知识点

VirtualAlloc和VirtualCopy的蕴含知识点 1.VirtualAlloc用来在进程的虚拟地址空间中保留(reserve)或者提交(commit)页。在保留时以64KB为粒度,即保留空间以64K为单位。而提交虚拟地址时,则以页(典型大小为4KB)为单位。 2.VirtualCopy用来绑…