什么是HTTP Referer标头?

时间:2011-04-22 08:22:32

标签: c# asp.net

有没有办法检查这个?我正在使用.NET框架,并希望了解有关如何防止CSRF攻击的更多信息。

3 个答案:

答案 0 :(得分:3)

您可以检查并拒绝来自第三方网站的请求到您网站的“控制器”部分(实际上会在数据库中进行更改)。

您也必须允许引用,因为某些防火墙和浏览器根本不发送它们。但它必须有保护。

在c#中,您可以通过以下方式访问它:

MyReferrer = Request.UrlReferrer.ToString();

答案 1 :(得分:2)

我希望这能帮助你处理/理解

Read this

它告诉您附加加密强随机值并将其设置为用户计算机上的cookie,并包含与表单值和cookie值相同的值。这将有所帮助。(所以似乎有效地使用了这个)

答案 2 :(得分:1)

推荐人单独检查won't help you并且它可能会打扰用户,因此最好不要依赖它。

ASP.NET可以帮助您通过the viewstate缓解CSRF:每个回发必须包含视图状态,否则框架将引发异常,并且由于攻击者无法读取它(要读取视图状态,他必须获取页面,并且不允许跨站点AJAX请求)攻击将失败。

但是,作为V4Vendetta pointed out仅限于查看状态is not enough:如果页面不包含具有每个用户唯一内容的控件,则视图状态对于不同用户将是相同的,因此攻击者可以简单地提交他的观点。

为防止这种情况发生,您可以将此代码放在要保护的每个页面中:

protected void Page_Init(Object sender, EventArgs e)
{
    this.ViewStateUserKey = this.Session.SessionID;
}

设置Page.ViewStateUserKey将为每个用户创建一个唯一的视图状态,从而无法复制/粘贴。或者您可以使用this等专用模块。