有没有办法检查这个?我正在使用.NET框架,并希望了解有关如何防止CSRF攻击的更多信息。
答案 0 :(得分:3)
您可以检查并拒绝来自第三方网站的请求到您网站的“控制器”部分(实际上会在数据库中进行更改)。
您也必须允许空引用,因为某些防火墙和浏览器根本不发送它们。但它必须有保护。
在c#中,您可以通过以下方式访问它:
MyReferrer = Request.UrlReferrer.ToString();
答案 1 :(得分:2)
答案 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等专用模块。