Исправление форм SQL-инъекций в большом веб-приложении asp.net C #

Мне нужно исправить проект, уязвимый для SQL-инъекции.

Все формы на каждой странице проекта не используют параметризованный запрос, а просто строковый запрос.

Для примера у меня есть страница поиска, и, глядя на код позади, я вижу, что есть метод CreateQuery () , который создает запрос на основе текстовых полей, например :

string sQuery = "";
sQuery += "b.name like '%" + txtName.Text + "%'";

Затем в btnSearch_Click () у меня есть метод, который выполняет запрос:

query = CreateQuery();
var totalList = GetAllBlaBla(query);

Мой вопрос:

Поскольку у меня есть сотни форм и тысячи formText и значения в FIX, существует ли «быстрое» решение для реализации вроде

  1. глобальной функции, которая параметризует запрос или каким-то образом обрабатывает ситуацию?
  2. Поскольку в каждом классе запрос выполняется в SubmitButton_Click () код метода, могу ли я справиться с ситуацией здесь, конечно, в каждом классе?
  3. Должен ли я изменять каждую форму и каждую запись в коде формы, чтобы параметризовать строку SQL, что займет один миллион лет?
  4. (Edit) Что насчет входных значений Encode / Decode? ТАК, что приведенный выше пример будет:

     string sQuery = "";
    var txt = var txt = HttpUtility.HtmlEncode (txtName.Text);
    sQuery + = "b.name как '%" + txt + "%'";
     

    Это возможный временный патч?

5- (Edit) Это возможное решение, или оно просто ничего не меняет?

        cmd.Parameters.Add("@txtNameParameter", SqlDbType.VarChar);
        cmd.Parameters["@txtNameParameter"].Value = txtName.Text;
        sQuery += "b.name like '%" + (string)cmd.Parameters["@txtNameParameter"].Value + "%'";

Проблема в том, что мне нужно вернуть строку, потому что логика, которая обрабатывает запрос определен в другом бизнес-классе, который принимает строку как запрос, я не могу дать ему CommandType или SqlDataAdapter ...

Предложение?

Заранее спасибо.

5
задан Attila 4 July 2011 в 14:40
поделиться