2013-07-05 2 views
0

я сделал ниже:Должен ли я использовать HttpUtility.HtmlEncode() для кодирования данных формы перед сохранением на SQL Server 2008?

  1. Отфильтрованный опасный символ

  2. кодировал данные формы перед сохранением в SQL Server 2008

    public static string EncodeData(string str) 
    { 
         string getStr = str; 
         getStr = getStr.Replace(";", " "); 
         getStr = getStr.Replace("&", ""); 
         getStr = getStr.Replace("<", ""); 
         getStr = getStr.Replace(">", ""); 
         getStr = getStr.Replace("'", ""); 
         getStr = getStr.Replace("--", ""); 
         getStr = getStr.Replace("/", " "); 
         getStr = getStr.Replace("%", ""); 
         getStr = getStr.Replace("*", ""); 
         getStr = getStr.Replace(":", ""); 
         getStr = getStr.Replace("!", ""); 
         return HttpUtility.HtmlEncode(getStr); 
    } 
    

Это то, что я сделал правильно?

ответ

2

Не кодируйте перед хранением, а затем кодируйте в ближайшей точке для вывода. При кодировании перед хранением у вас есть несколько проблем

  1. Вы ограничиваете свои данные в одном формате. Что делать, если вы хотели бы вернуть эти данные как JSON? Или RSS? Правила кодирования различны, и теперь вы в значительной степени вынуждаете данные быть HTML.
  2. Что делать, если датчик изменяется из-за ошибки? Ни одна из ваших сохраненных данных не приведет к тому, что исправление ошибки применяется, потому что вы не кодируете, вытаскивая его из хранилища.

И как в стороне, я согласен с тем, что вы должны использовать параметризованные запросы или ORM, которые делают это для вас, поэтому вы защищены от SQL-инъекции, не пытаясь вручную отбрасывать символы.

2

Это полностью, 100%, неправильный.

Вы должны использовать параметры , чтобы механизм базы данных отправлял текст отдельно от SQL-запросов.

Вы не должны произвольно лишать персонажей или применять нерелевантные escape-последовательности.

0

Сохранение символов в базе данных не является большой проблемой. Большая проблема заключается в отображении данных на веб-странице. Если вы не уверены в том, насколько безопасна ваша строка, тогда не стесняйтесь использовать HtmlEncode/HtmlDecode при отправке данных в браузер.

Смежные вопросы