当前位置: 首页 > news >正文

[实践总结] 限制正则表达式匹配次数/时间 防止DoS攻击

思路

1、优化正则表达式
2、正则表达式无法优化的话,可以考虑限制匹配次数,或者限制匹配时间

限制 匹配次数

public class CountedCharSequence implements CharSequence {private final CharSequence charSequence;private long count;public CountedCharSequence(CharSequence charSequence, long count) {this.charSequence = charSequence;this.count = count;}@Overridepublic String toString() {return charSequence.toString();}@Overridepublic int length() {return charSequence.length();}@Overridepublic char charAt(int index) {if (index <= 0) {throw new IllegalArgumentException("Regex match over max " + count + " times");}count--;return charSequence.charAt(index);}@Overridepublic CharSequence subSequence(int start, int end) {return charSequence.subSequence(start, end);}
}

模拟Dos攻击

String str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";long start = System.nanoTime();
Pattern.compile("^(a+)+$").matcher(str).matches();
System.out.println(((System.nanoTime() - start)) + " nano seconds");执行用时
1399200 nano seconds

超过 1亿 就会报错

long start1 = System.nanoTime();try {Pattern.compile("^(a+)+$").matcher(new CountedCharSequence(str, 100_000_000)).matches();
} catch (Exception e) {System.out.println(e.getMessage());
}System.out.println(((System.nanoTime() - start1)) + " nano seconds");执行用时
Regex match over max 100000000 times
601800 nano seconds

限制 匹配时间

import java.util.regex.Pattern;public final class TimedCharSequence implements CharSequence {private final CharSequence sequence;private final long timestamp;public TimedCharSequence(CharSequence sequence, long nanoseconds) {this.sequence = sequence;this.timestamp = System.nanoTime() + nanoseconds;}@Overridepublic String toString() {return sequence.toString();}@Overridepublic int length() {return sequence.length();}@Overridepublic char charAt(int index) {if (timestamp < System.nanoTime()) {throw new IllegalStateException("Regex match timeout");}return sequence.charAt(index);}@Overridepublic CharSequence subSequence(int start, int end) {return sequence.subSequence(start, end);}
}

模拟Dos攻击

String str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";long start = System.nanoTime();
Pattern.compile("^(a+)+$").matcher(str).matches();
System.out.println(((System.nanoTime() - start)) + " nano seconds");执行用时:
1385400 nano seconds

超过 给定时间间隔就报错

long start1 = System.nanoTime();try {Pattern.compile("^(a+)+$").matcher(new TimedCharSequence(str, 10_000)).matches();
} catch (Exception e) {System.out.println(e.getMessage());
}System.out.println(((System.nanoTime() - start1)) + " nano seconds");执行用时:
Regex match timeout
123100 nano seconds

[Ref]

[Ref] 限制正则表达式执行时间

相关文章:

[实践总结] 限制正则表达式匹配次数/时间 防止DoS攻击

思路 1、优化正则表达式 2、正则表达式无法优化的话&#xff0c;可以考虑限制匹配次数&#xff0c;或者限制匹配时间 限制 匹配次数 public class CountedCharSequence implements CharSequence {private final CharSequence charSequence;private long count;public Counte…...

ffmpeg 5.0版本调试 ffmpeg 5.01 static版本

ffmpeg 5.0版本调试 写法&#xff1a;ffmpeg -rtsp_transport tcp -re -i rtsp://admin:BYTtest2019192.168.1.2:554/h264/ch1/main/av_stream -q 5 -f mpegts -fflags nobuffer -c:v mpeg1video -an -s 960x540 http://127.0.0.1:12345/demo本地写法 ffmpeg -timeout 5000000…...

应用在游戏机触摸屏中的触摸感应芯片

触屏游戏机的屏幕是由液晶屏和触控层组成的。触控层分为电容式触屏和电阻式触屏两种。电容式触屏是将悬空电极和屏幕玻璃上的电极组成静电场,当人体接近屏幕时,就会改变静电场分布,从而实现触摸的位置探测。而电阻式触屏则是利用玻璃上的两层电极之间通电形成一个电阻值,当手指…...

D-Link DES-108 交换机

D-Link DES-108 交换机 1. 百兆交换机 8 口References ​ D-Link Corporation is a Taiwanese multinational networking equipment manufacturing corporation headquartered in Taipei, Taiwan. Taiwanese&#xff1a;adj. 台湾的 n. 台湾人 headquarter [hedkwɔ:tə]&#…...

VIT用于图像分类 学习笔记(附代码)

论文地址&#xff1a;https://arxiv.org/abs/2010.11929 代码地址&#xff1a;https://github.com/bubbliiiing/classification-pytorch 1.是什么&#xff1f; Vision Transformer&#xff08;VIT&#xff09;是一种基于Transformer架构的图像分类模型。它将图像分割成一系列…...

MongoDB Certified Associate Developer 认证考试心得

介绍 前段时间通过了 MongoDB Associate Developer 考试&#xff0c;也记下了一些心得&#xff0c;结果忘记发出来了&#xff0c;现在重新整理下。通过考试后证书是这样的: MongoDB 目前有两个认证证书 1. MongoDB Associate Developer 认证掌握使用MongoDB 来构建现代应用…...

基于Java车间工时管理系统(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…...

2024.1.5

今天真是狂学了一天的C&#xff0c;什么期末考试&#xff0c;滚tmd&#xff08;就一门政治&#xff0c;不能影响我c的脚步&#xff09;&#xff0c;今天还是指针&#xff0c;主要是函数指针和函数指针数组&#xff0c;将简单的两位数计算器程序用此方式更加简单的实现了&#x…...

水库大坝安全监测设计与施工经验

随着我国的科技水平不断上升&#xff0c;带动了我国的水电建设向更高层次发展。目前&#xff0c;我国的水电站大坝已有上百座&#xff0c;并且大坝安全检测仪器质量与先进技术不断更新发展&#xff0c;如今水电站大坝数据信息采集与观测资料分析&#xff0c;能够有效提高水库大…...

媒体捕捉-拍照

引言 在项目开发中&#xff0c;从媒体库中选择图片或使用相机拍摄图片是一个极为普遍的需求。通常&#xff0c;我们使用UIImagePickerController来实现单张图片选择或启动相机拍照。整个拍照过程由UIImagePickerController内部实现&#xff0c;无需我们关心细节&#xff0c;只…...

Typora+PicGo+Gitee构建云存储图片

创建Gitee仓库 首先&#xff0c;打开工作台 - Gitee.com&#xff0c;自行注册一个账户 注册完后&#xff0c;新建一个仓库&#xff08;记得仓库要开源&#xff09; 然后创建完仓库后&#xff0c;鼠标移动到右上角头像位置&#xff0c;选择设置&#xff0c;并点击&#xff…...

【话题】ChatGPT等大语言模型为什么没有智能2

我们接着上一次的讨论&#xff0c;继续探索大模型的存在的问题。正巧CSDN最近在搞文章活动&#xff0c;我们来看看大模型“幻觉”。当然&#xff0c;本文可能有很多我自己的“幻觉”&#xff0c;欢迎批评指正。如果这么说的话&#xff0c;其实很容易得出一个小结论——大模型如…...

通过大量生物、地球、农业、气象、生态、环境科学领域中案例,一起探索如何优雅地使用大模型吧!

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…...

slf4j+logback源码加载流程解析

slf4j绑定logback源码解析 Logger log LoggerFactory.getLogger(LogbackDemo.class);如上述代码所示&#xff0c;在项目中通常会这样创建一个Logger对象去打印日志。 然后点进去&#xff0c;会走到LoggerFactory的getILoggerFactory()方法&#xff0c;如下代码所示。 public …...

KVM虚拟机部署K8S重启后/etc/hosts内容丢失

前言 使用KVM开了虚拟机部署K8S&#xff0c;部署完成后重启&#xff0c;节点的pod等信息无法获取到&#xff0c;查看报错初步推测为域名解析失效&#xff0c;查看/etc/hosts后发现安装k8s时添加的内容全部消失 网上搜索一番之后发现了 如果直接修改 /etc/hosts 文件&#xff0…...

Redis使用场景(五)

Redis实战精讲-13小时彻底学会Redis 1.计数器 可以对 String 进行自增自减运算&#xff0c;从而实现计数器功能。 Redis 这种内存型数据库的读写性能非常高&#xff0c;很适合存储频繁读写的计数量。 2.缓存 将热点数据放到内存中&#xff0c;设置内存的最大使用量以及淘汰策略…...

【UnityShader入门精要学习笔记】(2)GPU流水线

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 上节复习GPU流水线顶点着色…...

CSS免费在线字体格式转换器 CSS @font-face 生成器

今天竟意外发现的一款免费的“网页字体生成器”&#xff0c;功能强大又好用~ 工具地址&#xff1a;https://transfonter.org/ 根据你设置生成后的文件预览&#xff1a; 支持TTF、OTF、WOFF、WOFF2 或 SVG字体格式转换生成&#xff0c;每个文件最大15MB。转换完成以后还会生成一…...

Codeium在IDEA里的3个坑

转载自Codeium在IDEA里的3个坑&#xff1a;无法log in&#xff0c;downloading language server和中文乱码_downloading codeium language server...-CSDN博客文章浏览阅读1.7w次&#xff0c;点赞26次&#xff0c;收藏47次。Codeium安装IDEA插件的3个常见坑_downloading codeiu…...

C-C++ 项目构建指南:如何使用 Makefile 提高开发效率

Makefile是一个常用的自动化构建工具&#xff0c;它可以为开发人员提供方便的项目构建方式。在C/C项目中&#xff0c;Makefile可以用来编译、链接和生成可执行文件。使用Makefile的好处是可以自动执行一系列命令&#xff0c;从而减少手动操作的复杂性和出错的可能性。此外&…...

FJSP:蛇鹫优化算法(SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

FJSP&#xff1a;蛇鹫优化算法&#xff08;SBOA&#xff09;求解柔性作业车间调度问题&#xff08;FJSP&#xff09;&#xff0c;提供MATLAB代码当车间调度遇上非洲大草原的蛇鹄&#xff0c;会碰撞出什么样的火花&#xff1f;今天咱们用MATLAB实现一种新颖的群智能算法——蛇鹄…...

TVM终极模型剪枝指南:如何快速实现结构化与非结构化剪枝

TVM终极模型剪枝指南&#xff1a;如何快速实现结构化与非结构化剪枝 想要让深度学习模型跑得更快、占用更少内存&#xff1f;TVM的模型剪枝功能就是你的最佳选择&#xff01;&#x1f680; 本文为你带来TVM剪枝的完整指南&#xff0c;从基础概念到实际应用&#xff0c;让你快速…...

戴尔Precision Pro商务笔记本回归,新一代产品聚焦便携性

看起来2026年是戴尔按下重启键的一年——在消费者和商用产品线中&#xff0c;戏剧性的品牌重塑都在被回归。有时候&#xff0c;老品牌确实是好品牌&#xff1a;熟悉的XPS名称和设计今年回归是有原因的&#xff0c;绝对不是因为戴尔Premium有正面的品牌认知度。在戴尔商务产品方…...

隐私保护方案:OpenClaw+GLM-4.7-Flash本地化处理敏感数据

隐私保护方案&#xff1a;OpenClawGLM-4.7-Flash本地化处理敏感数据 1. 为什么需要本地化处理敏感数据&#xff1f; 去年我帮一位做财务咨询的朋友处理季度报表时&#xff0c;遇到了一个棘手问题。他需要分析上百份包含客户银行流水、身份证号等信息的Excel文件&#xff0c;但…...

前端性能优化终极指南:使用Javalin实现静态资源压缩与智能缓存

前端性能优化终极指南&#xff1a;使用Javalin实现静态资源压缩与智能缓存 【免费下载链接】javalin 项目地址: https://gitcode.com/gh_mirrors/jav/javalin 在现代Web应用开发中&#xff0c;前端资源的加载速度直接影响用户体验和搜索引擎排名。Javalin作为一款轻量级…...

MinerU本地部署安全吗?数据隐私保护实战配置

MinerU本地部署安全吗&#xff1f;数据隐私保护实战配置 1. 引言&#xff1a;当AI遇见你的敏感文档 想象一下这个场景&#xff1a;你有一份包含商业机密的合同PDF&#xff0c;或者一份涉及个人隐私的医疗报告扫描件。你想用AI快速提取里面的关键信息&#xff0c;但又担心把文…...

vLLM-v0.17.1入门必看:从零部署支持多LoRA的开源推理框架

vLLM-v0.17.1入门必看&#xff1a;从零部署支持多LoRA的开源推理框架 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;最新发布的v0.17.1版本带来了多项重要改进&#xff0c;特别是增强了对多LoRA适配器的支持。这个开源项目最初由加州…...

PotPlayer跨语言字幕解决方案:基于百度翻译API的实时字幕转换工具

PotPlayer跨语言字幕解决方案&#xff1a;基于百度翻译API的实时字幕转换工具 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 在全球化…...

高效PDF处理:用PDF Arranger实现极简文档管理

高效PDF处理&#xff1a;用PDF Arranger实现极简文档管理 【免费下载链接】pdfarranger Small python-gtk application, which helps the user to merge or split PDF documents and rotate, crop and rearrange their pages using an interactive and intuitive graphical int…...

OpenClaw快速体验:30分钟玩转Qwen3.5-9B基础自动化

OpenClaw快速体验&#xff1a;30分钟玩转Qwen3.5-9B基础自动化 1. 为什么选择OpenClawQwen3.5组合&#xff1f; 去年冬天第一次接触OpenClaw时&#xff0c;我正被重复性的文件整理工作困扰。作为技术博主&#xff0c;每天需要从十几个渠道收集行业动态&#xff0c;手动归类到…...