OWASP обладает некоторой информацией об этой стратегии.Это всегда должен быть последний вариант (как описано в статье, на которую я ссылаюсь), но если это ваш единственный вариант ...
http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
цитата из статьио том, что это последний параметр
Однако эта методология неэффективна по сравнению с использованием параметризованных запросов.Этот метод следует использовать только с осторожностью, чтобы модифицировать устаревший код экономически эффективным способом.Приложения, созданные с нуля, или приложения, требующие низкого допуска к риску, должны быть построены или переписаны с использованием параметризованных запросов.
По сути, аргумент против этого подхода даже в том случае, если вы избегаете всех известных неверных данных, нет никакой гарантии, что кто-то не найдет способ обойти его в будущем.
Однако, чтобы конкретно ответить на ваш вопрос ...
список символов, которые нужно экранировать, находится встатья, на которую я ссылаюсь выше.
Редактировать Как уже отмечалось, в статье не очень хорошие ссылки.Тем не менее, для SQL Server, это делает: http://msdn.microsoft.com/en-us/library/ms161953.aspx
Обратите внимание, что список символов, которые вы должны экранировать, будет варьироваться в зависимости от платформы БД, но похоже, что вы используете SQL Server, так что этодолжно быть уместно ..
Цитата из статьи ниже:
Фильтрация ввода также может быть полезна для защиты от внедрения SQL путем удаления управляющих символов.Однако из-за большого количества символов, которые могут создавать проблемы, это не надежная защита.В следующем примере выполняется поиск разделителя строк символов.
private string SafeSqlLiteral(string inputSQL)
{
return inputSQL.Replace("'", "''");
}
Предложения LIKE
Обратите внимание, что при использовании предложения LIKE символы подстановки по-прежнему необходимо экранировать:
s = s.Replace("[", "[[]");
s = s.Replace("%", "[%]");
s = s.Replace("_", "[_]");