Какой язык клиента? То есть мы должны были бы точно знать, что представляет собой тип данных username и что делает метод Replace в отношении этого типа данных. Также, как фактическая конкатенация работает для этого типа данных. Может быть некоторый перевод набора символов, который будет переводить некоторые подобные кавычки символы в UTF-8 в «обычные» кавычки.
Для очень простого примера, который вы показываете, он должен просто работать, но производительность будет ужасной (согласно комментарию Тило). Вам нужно посмотреть на параметры для cursor_sharing
Для этого SQL
select * from user where username = '[blah]'
Пока [бла] не содержит ни одной кавычки, ее следует интерпретировать как одно значение CHAR. Если бы строка была больше чем 4000 байтов, это вызвало бы ошибку, и мне было бы интересно видеть, как это было обработано. Аналогично, пустая строка или строка, состоящая исключительно из одинарных кавычек. Управляющие символы (например, конец файла) также могут вызывать некоторые проблемы, но это может зависеть от того, могут ли они быть введены во внешнем интерфейсе.
Для имени пользователя было бы правомерно ограничить набор символов буквенно-цифровыми цифрами и, возможно, ограниченным набором знаков препинания (возможно, точка и подчеркивание). Поэтому, если бы вы применили подход фильтрации символов, я бы предпочел видеть белый список допустимых символов, а не черные списки одинарных кавычек, управляющих символов и т. Д.
Подводя итог, можно сказать, что в общем случае это плохая безопасность и негативно влияет на производительность. В определенных случаях это может (вероятно?) Не показывать какие-либо уязвимости. Но вы бы хотели сделать МНОГО тестирования, чтобы убедиться, что это не так.