Спуфинг данных 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";