Мы запускаем ColdFusion 2018 на сервере Windows 2016 с IIS.
Мы перезагрузили сервер Windows 16 января 2020 года в рамках планового обслуживания. На следующий день мы начали видеть изолированные ошибки переполнения стека, когда пользователи публиковали длинные строки (~ 2500 символов) в данных формы. Перезагрузка кажется не связанной, но это единственное недавнее изменение в нашей среде. Пользователи успешно представили данные, равные или больше по длине в течение ряда лет.
Вот ошибка:
java.lang.StackOverflowError
at org.apache.oro.text.regex.Perl5Matcher.__match(Unknown Source)
at org.apache.oro.text.regex.Perl5Matcher.__match(Unknown Source)
at org.apache.oro.text.regex.Perl5Matcher.__match(Unknown Source)
[Repeats many more times....]
Ошибка возникла из строки «REFindNoCase» приведенного ниже кода, которая проверяет вредоносный ввод, поступающий из отправленных форм.
var failedTest = false;
var doZealousTesting = true;
var badTagsAndEvents = "SCRIPT|OBJECT|APPLET|EMBED|FORM|LAYER|ILAYER|FRAME|IFRAME|FRAMESET|HREF|SRC|PARAM|META|onClick|onDblClick|onKeyDown|onKeyPress|onKeyUp|onMouseDown|onMouseOut|onMouseUp|onMouseOver|onBlur|onChange|onFocus|onSelect|javascript";
var zealousRegex = "((\%3C)|<)(.)+((\%3E)|>)";
var conservativeRegex = "((\%3C)|<)(.)*(#badTagsAndEvents#)+(.)*((\%3E)|>)";
var regexTest = iif(doZealousTesting,de(zealousRegex),de(conservativeRegex));
for (key in form) {
failedTest = (failedTest or REFindNoCase(regexTest,left(form[key],3999)) neq 0);
}
Не пропустили ли мы какую-то внутреннюю проблему с кодом?
(Кстати, мы смогли отменить ошибки, установив для флага ColdFusion "useJavaAsRegexEngine" значение true.)