Я только кратко посмотрел на этот код. Я не провёл тщательное изучение всех условий, но вижу, по крайней мере, одну проблему:
const sqlUnion = new RegExp('((\%27)|(\'))union', 'i');
Это не отловит SQL-инъекцию с одним или несколькими пробелами между '
и union
.
Я не предполагаю, что исправление регулярных выражений сделало бы это безопасным. Я бы посоветовал, что подход с использованием регулярных выражений принципиально небезопасен . Есть слишком много крайних случаев, которые могут ускользнуть.
Трудно протестировать во всех этих случаях, и запрос бесплатной проверки кода в Stack Overflow не является планом тестирования.
Существует хорошо известное решение, которое проще и безопаснее: Используйте параметры запроса.
Вы сказали, что используете ORM, который этого не позволяет. Я бы сказал, что ORM необходимо исправить или отказаться. Неспособность обеспечить безопасность наиболее общепринятым способом делает его незапускаемым.