Если что-то закодировано в HTML или URL, должно ли оно быть декодировано?Достаточно ли кодирования? - PullRequest
2 голосов
/ 17 августа 2011

Первый пользователь AntiXSS 4 здесь.Чтобы сделать мое приложение более безопасным, я использовал Microsoft.Security.Application.Encoder.UrlEncode для параметров QueryString и Microsoft.Security.Application.Encoder.HtmlEncode для параметравведено в поле формы.

У меня есть множественное число, и я был бы признателен, если бы вы попытались ответить на все из них (не обязательно за один раз или от одного и того же человека - любой возлюбленный вообщеочень полезно).

My first Вопрос в том, правильно ли я использую эти методы (то есть я использую соответствующий метод AntiXSS для соответствующей ситуации)?

My второй вопрос, когда я что-то закодировал, должно ли оно когда-нибудь быть декодировано.Я запутался, потому что я знаю, что класс HttpUtility предоставляет способы как кодирования, так и декодирования, так почему же в AntiXSS не делается то же самое?Если это поможет, то параметры, которые я закодировал, никогда не будут обрабатываться как что-либо, кроме текста внутри приложения.

Мой третий вопрос относится к третьему, но я хотелподчеркнуть это, потому что это важно (и, вероятно, является источником моего общего замешательства).Я слышал, что .NET Framework автоматически декодирует такие вещи, как QueryStrings, поэтому нет необходимости в явном методе декодирования.Если это так, то какой смысл HTML кодировать что-то в первую очередь, если оно будет отменено.Это просто ... не кажется безопасным?Чего мне не хватает, тем более что, как уже упоминалось, класс HttpUtility обеспечивает декодирование.

И вопрос last , помогает ли AntiXSS против SQL-инъекций или делаетэто только защита от XSS-атак?

1 Ответ

2 голосов
/ 18 августа 2011
  1. Трудно сказать, правильно ли вы это используете. Если вы используете UrlEncode при построении строки запроса, которая затем выводится в виде ссылки на странице, тогда да, это правильно. Если вы используете Html-кодирование, когда вы записываете что-то в виде значения, тогда да, это правильно (хорошо, если это установлено с помощью атрибута HTML, вам следует использовать HtmlAttributeEncode, но они почти одинаковы).

  2. .NET-декодеры работают с закодированными значениями AntiXSS, поэтому я не имел смысла переписывать их ухмылка

  3. Смысл кодирования в том, что вы делаете это при выводе. Так, например, если у пользователя есть в форме input window.alert ('Numpty!), И вы просто добавляете этот ввод raw в свой вывод, javascript будет работать. Если вы закодируете его первым, вы увидите <становиться & lt; и т. д. </p>

  4. Нет, SQL-инъекция - это совсем другая проблема.

...