gpt4 book ai didi

regex - 让用户输入自定义正则表达式模式是否安全?

转载 作者:行者123 更新时间:2023-11-29 12:27:23 26 4
gpt4 key购买 nike

我有一个应用程序,它将文本文件作为输入并从中解析文本并将它们存储在数据库中。在此之后,用户可以查找某些关键字以查看它们是否与上传的文本文件中的任何文本相匹配。

我希望用户不仅可以输入关键字,还可以组成他们自己的正则表达式模式,系统将使用这些模式来搜索内容。自定义正则表达式模式会将属性 isRegex 设置为 true。

因此,我正在这样搜索我的代码中的文本:

if (keyword.isRegex) {
if (text ==~ /${keyword}/) {
m = text =~ /${keyword}/
m.each {println "Found ${it}"
}
}
else {
if (text ==~ /\b${keyword}\b/) {
m = text =~ /\b${keyword}\b/
m.each {prinltn "Found ${it}"
}
}

问题

  • 让用户输入自己的自定义正则表达式是否安全?如果没有,我可以采取哪些措施来避免安全问题。
  • 我查找文本的方法是否正确?我知道有全文搜索解决方案或数据库,但我不需要它们提供的所有功能。使用 PostgreSQL 进行全文搜索会更好吗?它是否提供正则表达式?

最佳答案

在天真的实现中,不,它不安全。人们可以对称为 ReDoS 的正则表达式执行攻击。 .您还可以在 OWASP 上阅读更多相关信息.这是一种通过消耗计算资源来实现的拒绝服务,这可能会阻止其他请求得到响应。

如果使用 statement_timeout 限制正则表达式的执行时间,则可以防止 ReDoS,这可以通过 set statement_timeout to 10000 进行设置。将 10000 替换为与您的环境更相关的超时。

您还可以考虑使用 LIKE 运算符根据关键字进行选择。基于关键字的搜索通常比正则表达式更人性化,而且您不必担心设置超时。

关于regex - 让用户输入自定义正则表达式模式是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25269811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com