正则表达式 – 从文件读取正则表达式是否安全?

假设一个允许用户在配置文件中指定多个文本过滤器表达式的Perl脚本,是否有一种安全的方式让它们输入正则表达式,而不会有意外的副作用或代码执行?没有实际解析正则表达式并检查它们是否有问题的结构,也就是说.不会有任何替代,只有匹配.

另外,有没有办法在实际使用之前测试指定的正则表达式是否有效?如果像/ foo(bar /被输入),我想发出警告.

谢谢,Z

编辑:
感谢非常有趣的答案.我已经发现,如果使用re’eval’pragma,以下危险的结构将仅在正则表达式中进行评估:

(?{code})
(??{code})
${code}
@{code}

默认是no re’eval’;所以除非我缺少一些东西,否则从文件中读取正则表达式应该是安全的,唯一的检查是Axeman发布的eval / catch.至少我没有能够在我的测试中隐藏任何邪恶的东西.

再次感谢. Z.

根据您匹配的内容以及您正在运行的Perl版本,可能会有一些正则表达式通过使用过多的前瞻性,lookbehinds和其他断言作为有效的拒绝服务攻击.

您最好只允许一小部分,众所周知的正则表达式模式,并在您和您的用户学习如何使用系统时谨慎扩展.以同样的方式,许多博客评论系统只允许一小部分的HTML标签.

如果您需要对正则表达式进行复杂分析,最终Parse :: RecDescent可能会变得有用.

相关文章
相关标签/搜索