E C*_*ole 5 c++ regex security
使用用户定义的表达式是否安全std::regex(例如用于服务器端搜索)?标准库是否对损坏的表达式的安全性做出任何保证?
该标准要求实现在传递的正则表达式无效时抛出错误。
\n\n\n\nRun Code Online (Sandbox Code Playgroud)\nexplicit basic_regex(const charT* p, flag_type f = regex_constants::ECMAScript);\n要求:
\np不得为空指针。抛出:
\nregex_\xc2\xaderrorifp不是有效的正则表达式。作用:构造一个basic_\xc2\xadregex类的对象;对象的内部有限状态机是根据
\ncharT长度数组中包含的正则表达式构造的char_\xc2\xadtraits<charT>::\xe2\x80\x8blength(p),该数组的第一个元素由 指定p,并根据标志 进行解释f。确保:
\nflags()回报f。mark_\xc2\xadcount()返回表达式中标记的子表达式的数量。
甚至还有一个表格详细说明了可能出现的不同类型的错误。
\n因此,只要不传递空指针,从用户提供的字符串创建正则表达式时就不应该出现未定义的行为。
\n请注意,任何实际实现当然可能仍然存在可能导致安全漏洞的错误。该标准显然也不能保证恶意用户无法通过提交非常复杂/自引用的正则表达式来 DoS 您的系统,该正则表达式会产生太多匹配项,使用太多内存/CPU 等,因此您将必须自己考虑一下。但如果您只是担心无效的正则表达式是否会导致 UB,那么答案是“不,没问题”。
\n