Как исправить неправильную нейтрализацию HTML-тегов, связанных со сценариями, на веб-странице?

Недавно мы запустили VeraCode, и следующий метод не удался:

static public void WriteTargetAttribute(HtmlTextWriter writer, string targetValue)
    {
        if ((writer != null) && (!String.IsNullOrEmpty(targetValue)))
        {

            if (targetValue.Equals("_blank", StringComparison.OrdinalIgnoreCase))
            {
                string js = "window.open(this.href, '_blank', ''); return false;";
                writer.WriteAttribute("onclick", js);
                writer.WriteAttribute("onkeypress", js);
            }
            else
            {
                writer.WriteAttribute("target", targetValue);
            }
        }
    }

Ошибка VeraCode в последней строке: "writer.WriteAttribute("target", targetValue);"

Что я могу сделать, чтобы это исправить?

Спасибо


person piterskiy    schedule 21.02.2014    source источник


Ответы (1)


Проблема в том, что 'targetValue' передается вашему методу, но нейтрализация этого до того, как он будет использован, невозможна - строка получает использование 'как есть', поэтому может содержать сценарии, причиняющие вред. Существует хорошее описание, объясняющее это и почему это проблема: http://www.veracode.com/images/pdf/top5mostprevalent.pdf

Поскольку targetValue будет отображаться на веб-странице, кто-то может ввести сценарий, который будет отображаться на последней странице. Если «targetValue» был непослушным фрагментом кода, вы подвергаете себя и своих пользователей уязвимости безопасности.

Ознакомьтесь с советами в этой памятке: https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

Вы должны иметь возможность использовать HtmlEncode, чтобы сделать это безопасным HttpUtility.HtmlEncode(targetValue);

writer.WriteAttribute("target", System.web.HttpUtility.HtmlEncode(targetValue));

person Al Mills    schedule 22.02.2014
comment
Благодарю вас! HtmlEncode() работал у меня. Проверка Veracode прошла успешно. - person Bindum; 23.05.2019