Мне нужно исправить проект, уязвимый для SQL-инъекции.
Все формы на каждой странице проекта не используют параметризованный запрос, а просто строковый запрос.
Для примера у меня есть страница поиска, и, глядя на код позади, я вижу, что есть метод CreateQuery ()
, который создает запрос на основе текстовых полей, например :
string sQuery = "";
sQuery += "b.name like '%" + txtName.Text + "%'";
Затем в btnSearch_Click ()
у меня есть метод, который выполняет запрос:
query = CreateQuery();
var totalList = GetAllBlaBla(query);
Мой вопрос:
Поскольку у меня есть сотни форм и тысячи formText
и значения в FIX, существует ли «быстрое» решение для реализации вроде
SubmitButton_Click ()
код метода, могу ли я справиться с ситуацией здесь, конечно, в каждом классе? (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 ...
Предложение?
Заранее спасибо.