我理解Cross-Site Request Forgery并在asp.net mvc找到了大量博客,网上文章来处理它,但是没有一个合适的链接,有用的解决方案来处理asp.net网络应用程序中的CSRF攻击。我在我的网站上运行了security tool,并报告了跨网站请求伪造并显示风险
可以窃取或操纵客户会话和Cookie,这可能会用于冒充合法用户,允许 黑客查看或更改用户记录,以及以该用户
执行交易我的问题是如何处理ASP.NET Web应用程序中的CSRF攻击?
答案 0 :(得分:1)
如果你查看你发布的第二个链接,你会看到MVC中Html.AntiForgeryToken()
验证的逻辑:
void ValidateRequestHeader(HttpRequestMessage request)
{
string cookieToken = "";
string formToken = "";
IEnumerable<string> tokenHeaders;
if (request.Headers.TryGetValues("RequestVerificationToken", out tokenHeaders))
{
string[] tokens = tokenHeaders.First().Split(':');
if (tokens.Length == 2)
{
cookieToken = tokens[0].Trim();
formToken = tokens[1].Trim();
}
}
AntiForgery.Validate(cookieToken, formToken);
}
在您的网络表单应用中,难以做到这一点。
有关可能的解决方案,请参阅THIS答案。
答案 1 :(得分:0)
网络表单应用中的ViewState mechanism can be used to protect against CSRF。
ASP.NET有一个维护ViewState的选项。 ViewState 表示提交给服务器时页面的状态。该 状态是通过放置在每个页面上的隐藏字段定义的 控制。 Viewstate可用作CSRF 防御,因为攻击者很难伪造有效的 视图状态。由于它是伪造有效的Viewstate并非不可能 可行的是,参数值可以通过获得或猜测 攻击者。但是,如果将当前会话ID添加到 ViewState,它然后使每个Viewstate独特,从而免疫 CSRF
关于CSRF的另一个问题:
可以窃取或操纵客户会话和Cookie,这些会话和Cookie可能用于冒充合法用户,允许黑客查看或更改用户记录,以及以该用户身份执行交易
CSRF攻击通常不允许攻击者查看任何内容,只能代表登录用户发出请求。但是,如果存在不需要提交当前密码的更改密码选项,则攻击者可能能够使用受害者的会话为攻击者调用此函数,然后再直接登录为受害者用户。
答案 2 :(得分:0)
Asp.net Web表单应用程序中是否有相同的解决方案可以在Global.asax
处理。
在MVC中它变得非常简单但是如果旧的应用程序是简单的Web表单并且想要在全局级别防止这种攻击那么将是什么解决方案。