我有一个解析数据流的系统,它需要根据许多用户的订阅来过滤它。然而,这些过滤器可以包含正则表达式,我需要使其足够安全,以便恶意用户无法插入故意消耗 CPU 开销的正则表达式以破坏服务。
我想知道最好的方法应该是什么,
在我制作的另一个程序中,我通过生成一个执行正则表达式搜索的新线程来处理这个问题,如果这个线程运行的时间超过了限制,它就会被杀死并且入口被阻止。
然而,这个系统可能每分钟处理数千条记录,我无法想象我会为每条记录生成一个新线程(实际上我需要为每个条目循环所有订阅,因此每分钟可能有数十万个线程) .
有没有更好的方法来处理这个问题?创建订阅后,我是否应该使用一些测试数据来测试正则表达式?或者可能为在不同线程中解析的每个用户使用单独的队列?
我想到的另一种方法是收集有关每个过滤器花费多少 CPU 时间的统计信息,并禁用那些消耗过多的过滤器,但这并不能真正处理可能需要几分钟 CPU 的“非常糟糕”的正则表达式完成时间
如果有人感兴趣,我正在用 c# 编写它,但这个问题相当笼统,可以适用于任何语言