Pull to refresh

Comments 9

Я бы и рад забыть, но есть нюанс:
  1. WebForms еще много где используется в продакшене и усилием воли это не изменить.
  2. Большую часть проблем этого примера не решает использование MVC. Ок, покажу аналогичный пример для MVC на митапе.
Да понятно, что не в фреймворке дело.
Дело в говнокоде. Когда в CodeBehind(или контроллерах) пишут запросы… это плохо во всех смыслах. Возникает желание Request параметры еще горяченькими всунуть в запрос.
Когда у нас нормальный BL — большинство таких детских проблем безопасности сами отпадают.
UFO landed and left these words here
where += String.Format(" {0} >= @min AND {0} <= @max", EncodeSqlField(field));
...
private string EncodeSqlField(string field)
{
    return field.Replace("'", String.Empty)
        .Replace(" ", String.Empty)
        .Replace("\\", String.Empty)
        .Replace(",", String.Empty)
        .Replace("(", String.Empty)
        .Replace(")", String.Empty);
}


Вы что это, серьёзно? В 2015-м году ручное экранирование входных параметров?
Во-первых, это скачок в прошлое, а во-вторых, где фильтр на апострофы, кавычки, двойное тире,…

Никогда больше так не делайте.
UFO landed and left these words here
1) Покажите не ручное экранирование параметров параметров, решающее проблему;)
2) А нужен ли здесь фильтр на апострофы и кавычки? Решит ли проблему фильтр на двойное тире?
Список доступных полей для фильтрации решит данную проблему.
Не ручное экранирование — корректное использование SqlCommand/L2S/EF/вставьте_своё.

command.Parameters.Add(new SqlParameter("@min", typeof(int))).Value = min;
command.Parameters.AddWithValue("@max", max);

Первый случай если нужно контролировать маппинг типов, второй — если оставляем по-дефолту. Про l2s вообще думать не надо — просто фигачим ORM методы и проблем не знаем.
Sign up to leave a comment.

Articles