如何降低正则灾难性回溯风险
识别嵌套量词和重叠重复,用失败输入、长度上限与目标引擎计时降低正则拒绝服务风险。
识别嵌套量词和重叠重复,用失败输入、长度上限与目标引擎计时降低正则拒绝服务风险。
Example: 对 (a+)+$ 输入 aaaaaaaa!,末尾感叹号会迫使回溯引擎重新尝试 a 的多种分组;若字段只允许 a,可比较线性的 ^a+$。
逐步增加失败输入长度并记录耗时,不要直接粘贴超长文本让页面卡住;目标是得到可比较的增长曲线,而不是证明某次运行没超时。
同时记录模式、标志、引擎与版本、输入生成方法、长度、时间和拒绝阈值。
让字符类和替代分支互不重叠,给完整字段加锚点,限制输入长度;需要表达嵌套结构时优先分步解析。调用路径也要复核:同一正则若对大请求重复执行,仍可能放大服务风险。
本站只拦截少量可识别的嵌套量词形状,并限制模式 500 字符、样本 20000 字符。高风险模式可能不符合这些签名;另一个引擎也可能采用不同算法,最终必须在目标环境进行性能与超时测试。
常见问题
只能消除这一个嵌套结构,替代模式仍要符合字段合同。应配合锚点、字符限制和近似失败样本,而不是机械改写。
不能。提示只是有限签名检查,后端可能是另一引擎。要用生产长度限制和对抗输入在目标运行时测量。
保留精确模式与标志、引擎/版本、输入生成器、长度、耗时、超时设置,以及团队用来拒绝表达式的阈值。
延伸阅读
继续探索