想象一下,PHP(或JS)在其正则表达式匹配函数preg_match(...)
中存在缺陷。 对于相同的参数,有时它会给出匹配,有时它不会。
这会产生哪些安全问题?这个函数可以在服务器端(或客户端,在JS情况下)被利用吗?
编辑:例如,假设我有一个字符串STR,一个正则表达式模式PTR和一个匹配函数MATCH(STR,PTR),它返回 true 或 false 如果字符串与模式匹配,则为resp。
考虑一下我执行以下代码:
STR = ...;
PTR = ...;
MATCH(STR, PTR); // will return true
MATCH(STR, PTR); // will return false
MATCH(STR, PTR); // will return true
MATCH(STR, PTR); // will return false
因此,对于相同的值PTR,STR,该函数将返回不同的(显然是非确定性的)输出。这个问题有多严重?
注意:PTR和STR的所有值都不会发生这种情况,但PTR和STR有很多可能的值会触发此问题。