Спуфинг данных HTTP-реферера с использованием ASP.NET

ответы здесь и на различных других сайтах часто полны предупреждений не доверять заголовкам http-рефереров, потому что они "так легко" подделаны или подделаны.

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

хотя я не сомневаюсь, что предупреждения о поддельных реферерах верны, я не могу найти подробную информацию о как ими можно манипулировать. Даже Википедия статья говорит об этом только в общих чертах.

Я собираюсь играть с RefControl addin для FireFox.

программно (в ASP.NET в частности) The UrlReferrer это свойство только для чтения, поэтому я не вижу, как я могу запускать запросы с поддельными данными реферера, если я не могу его установить? Мне действительно нужно делать это вручную?

Как бы я использовал ASP.NET чтобы отправить запрос на мой сайт с пользовательской переменной для заполнения заголовок реферера?

EDIT: согласно моему комментарию ниже, я идеально хочу принять входящий запрос, manupulate данные реферера, а затем передать запрос на другую страницу, неповрежденную. Если я смогу сделать это появляется intact, построив новый с нуля и скопировав исходные свойства, тогда это тоже нормально.

2 ответов


Я не знаю, если это именно то, что вы хотите, но в целом, вы должны быть в состоянии подменить значение UrlReferer свойство (даже если оно доступно только для чтения) в HttpContext.Current.Request используя немного размышлений.

например:

FieldInfo fi = HttpContext.Current.Request.GetType().GetField("_referrer", BindingFlags.NonPublic | BindingFlags.Instance);

string initialReferer = HttpContext.Current.Request.UrlReferrer.ToString();
if (fi != null)
    fi.SetValue(HttpContext.Current.Request, new Uri("http://example.com"));
string fakedReferer = HttpContext.Current.Request.UrlReferrer.ToString();

On VS; это значения до и после изменения UrlReferrer:

initialReferer
"http://localhost/Test/Default.aspx"
fakedReferer
"http://example.com/"

если вы откроете системы.Веб-сборка с использованием помощью ILSpy вы заметите, что свойство UrlReferrer выглядит примерно так это:

public Uri UrlReferrer
{
    get
    {
        if (this._referrer == null && this._wr != null)
        {
            string knownRequestHeader = this._wr.GetKnownRequestHeader(36);
            if (!string.IsNullOrEmpty(knownRequestHeader))
            {
                try
                {
                    if (knownRequestHeader.IndexOf("://", StringComparison.Ordinal) >= 0)
                    {
                        this._referrer = new Uri(knownRequestHeader);
                    }
                    else
                    {
                        this._referrer = new Uri(this.Url, knownRequestHeader);
                    }
                }
                catch (HttpException)
                {
                    this._referrer = null;
                }
            }
        }
        return this._referrer;
    }
}

вероятно, это не даст вам то, что вы хотите. Но вы можете изменить Referror из класса HttpWebRequest. Я не думаю, что есть способ редактирования реферера вашего запроса в контексте.

using System.Net;

HttpWebRequest Req= (HttpWebRequest)System.Net.HttpWebRequest.Create("http://somewhere.com/");
Req.Referer = "http://www.fakesite.com";