Если что-то закодировано в HTML или URL, должно ли оно быть декодировано? Достаточно ли кодирования?
Впервые пользователь AntiXSS 4 здесь. Чтобы сделать мое приложение более безопасным, я использовал Microsoft.Security.Application.Encoder.UrlEncode для параметров QueryString и Microsoft.Security.Application.Encoder.HtmlEncode для параметра, введенного в поле формы.
У меня есть множественное число, и я был бы признателен, если бы вы попытались ответить на все из них (это не обязательно должно быть сразу или одним и тем же человеком - любые упоминания могут быть очень полезными).
Мой первый вопрос: правильно ли я использую эти методы (то есть я использую подходящий метод AntiXSS для соответствующей ситуации)?
Мой второй вопрос, как только я что-то закодировал, если это когда-нибудь будет декодировано. Я запутался, потому что знаю, что класс HttpUtility предоставляет способы как кодирования, так и декодирования, так почему же в AntiXSS не делается то же самое? Если это поможет, то параметры, которые я закодировал, никогда не будут обрабатываться как что-либо, кроме текста внутри приложения.
Мой третий вопрос связан с третьим, но я хотел подчеркнуть его, потому что он важен (и, вероятно, является источником моей общей путаницы). Я слышал, что.NET Framework автоматически декодирует такие вещи, как QueryStrings, поэтому нет необходимости в явном методе декодирования. Если это так, то какой смысл HTML кодировать что-то в первую очередь, если оно будет отменено. Это просто... не кажется безопасным? Чего мне не хватает, тем более что, как уже упоминалось, класс HttpUtility обеспечивает декодирование.
И последний вопрос: помогает ли AntiXSS против SQL-инъекций или он защищает только от XSS-атак?
1 ответ
Трудно сказать, правильно ли вы это используете. Если вы используете UrlEncode при построении строки запроса, которая затем выводится в виде ссылки на странице, тогда да, это правильно. Если вы используете Html-кодирование, когда вы записываете что-то как значение, тогда да, это правильно (хорошо, если это установлено с помощью атрибута HTML, вам следует использовать HtmlAttributeEncode, но они почти одинаковы).
Декодеры.NET работают с закодированными значениями AntiXSS, поэтому я не имел смысла переписывать их
Смысл кодирования в том, что вы делаете это при выводе. Так, например, если у пользователя есть в форме input window.alert('Numpty!), И вы просто добавляете этот необработанный ввод в вывод, javascript будет работать. Если вы закодируете его первым, вы увидите <становиться & lt; и так далее.
Нет, SQL-инъекция - это совсем другая проблема.