如何有效防止「正则表达式注入」?

2016-11-04 23:48:45 +08:00
 billlee

我们知道,在应用中从外界接受输入拼接正则表达式,很容易被 DoS 攻击。即使不考虑 DoS 攻击的问题,如果输入含有特殊字符,也会造成正则表达式的语义出错。

一般在根据外界输入进行搜索是,都是使用 startsWith, contains 这些不使用正则表达式,直接做字符串查找的方法。但是有些情况下是不得不使用正则的,例如,在 mongodb 里按字符串前缀检索数据,就必须用正则。

在这样的情况下,有没有什么比较通用、可靠的方法来防止「正则表达式注入」?

4381 次点击
所在节点    编程
4 条回复
oott123
2016-11-05 00:23:50 +08:00
语义问题就转义呗
转义了的话,好好写正则应该不会被 DoS 了吧?
langmoe
2016-11-05 00:57:08 +08:00
@oott123 我估计楼主想说的不是注入,是类似这种的攻击
http://www.zhouhua.info/2015/06/02/trap/
binux
2016-11-05 01:14:51 +08:00
正则也有转义的啊
terence4444
2016-11-05 01:52:22 +08:00
/E /Q 可以转义吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/318173

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX