Я хотел бы создать безопасный динамический оператор выбора, который может обрабатывать несколько предложений WHERE.
Например, базовый SQL будет выглядеть так:
SELECT * FROM Books Where Type='Novel'
Я бы передал функцию что-то вроде:
SafeDynamicSQL("author,=,Herman Melville","pages,>,1000");
Что бы очистить входные данные и объединить как:
SELECT * FROM Books Where Type='Novel' AND author=@author AND pages>@pages
Функция будет очищать имя столбца, проверяя массив предопределенных имен столбцов. Оператору будет разрешено быть только>, <, =. Значение будет добавлено как обычный параметр. </p>
Будет ли это уязвимо для SQL-инъекций?
Будут некоторые манипуляции со строками и небольшие циклы, которые будут влиять на производительность, но я думаю, что это займет всего несколько миллисекунд по сравнению с запросом, который в среднем занимает 200 мс. Будет ли это облагать сервер налогом больше, чем я думаю, если эти запросы будут выполняться примерно раз в секунду?
Я знаю, что это не лучшая практика, но это значительно ускорит развитие. Пожалуйста, дайте мне другие причины, по которым это может быть плохой идеей.