как мы должны проверять реферер заголовка http в aspx - PullRequest
2 голосов
/ 24 марта 2009

Я хочу убедиться, что на страницу ошибки не попадает ничего плохого в реферер.

Что я должен проверять для проверки заголовка http.

ниже мой текущий код:

// Ensure the referrer header is good
if (this.Request.UrlReferrer.IsWellFormedOriginalString() &&
    this.Request.UrlReferrer.Host.Equals(this.Request.Url.Host))
{

это не удастся, например, при сканировании acunetix, использующем% 3C и% 3E вместо <и>, поэтому мне, очевидно, нужно рассмотреть html-кодирование - есть ли что-то еще, что я пропускаю?

Обновление Я могу поймать все сканы acunetix, используя код ниже:

if (this.Request.UrlReferrer.IsWellFormedOriginalString() &&
    this.Request.UrlReferrer.Host.Equals(this.Request.Url.Host) &&
    !Regex.IsMatch(this.Request.UrlReferrer.ToString(),
                   "%3C",
                   RegexOptions.IgnoreCase))
{

Ответы [ 2 ]

1 голос
/ 24 марта 2009

Я хочу убедиться, что на страницу ошибки не попадает ничего плохого в реферер.

Затем всегда HTML-экранируйте любую строку, включая URL-адреса реферера, которую вы выводите на страницу ошибки.

Попытка выбора и внесения в черный список ввода, содержащего потенциально опасные символы, в каждом конкретном случае делает это в обратном направлении. Вы, вероятно, не поймаете все возможные атаки, и вы будете излишне запрещать действительные URL. (Вполне разумно иметь URL с "% 3C" в.)

0 голосов
/ 24 марта 2009

this.Request.UrlReferrer может быть нулевым, если реферер не был предоставлен или принимал участие.

...