在ASP.NET MVC的自带的模板代码中,有这样一段,用来拦截非登录用户,使其跳转到登录页面,然后登录后在跳转回原页面。所以,期间有一个returnUrl参数用来保存原页面地址。在Login Action中,

public ActionResult Login(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
RegisteredUser usr = RegisteredUserBLL.AuthenticateUser(model.UserName, model.Password);
if (usr != null)
{
FormsAuthentication.SetAuthCookie(model.UserName + "|" + usr.RealName + "|" + usr.UserType, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) ///为什么这么写????
return Redirect(returnUrl);
return RedirectToAction("Index", "Home"); }
ModelState.AddModelError("", "登录账号或密码不正确"); //
}
return View(model);
}

Url.IsLocalUrl(returnUrl)用于避免跳转攻击。攻击者伪造一个看起来指向你的网站的链接,诱使用户点击,点击后,跳转到他的钓鱼网站上,而用户无法察觉。甚至,攻击者可以产生一个跨站攻击(xss),将用户cookie提交给他的网站,导致用户隐私泄露。

使用这个方法,可以判断这个URL是否指向本地网站,还是指向另一个网站。举一个例子,比如工商银行的登录问题,工行的网站叫 www.icbc.com.cn,有人仿造建立了一个网站叫 www.icbc888.cn,伪造网站看起来和工行的网站一样。并且在论坛上发布这样一个帖子:快来啊,工商银行派发红包啦,点这里:http://www.icbc.com.cn/account/login?returnUrl=www.icbc888.cn。用户看起来会觉得这个链接是工商银行的,但是当它点进去以后,会被跳转到www.icbc888.cn,后面的事情你可以想象到。

ASP.NET MVC的跳转攻击问题的更多相关文章

  1. Asp.net MVC 如何防止CSRF攻击

    什么是CSRF攻击? CSRF(Cross-site request forgery跨站请求伪造,也被称成为"one click attack"或者session riding,通 ...

  2. 【转】asp.net mvc 页面跳转

    1.使用传统的Response.Redirect例如string url = "/account/create";Response.Redirect(url); 1.Server. ...

  3. asp.net mvc 防止跨站攻击

    View @using (Html.BeginForm("Contact","Home",FormMethod.Post)) { @Html.AntiForge ...

  4. ASP.NET MVC Authorization 自定义跳转

    应用场景:在 ASP.NET MVC 应用程序中,需要对用户身份权限进行验证,比如没有登录或者不符合权限的用户,访问 Action 的时候,跳转到指定页面. 重写 Authorize: public ...

  5. ASP.NET MVC中防止跨站请求攻击(CSRF)

    转载   http://kevintsengtw.blogspot.co.nz/2013/01/aspnet-mvc-validateantiforgerytoken.html 在 ASP.NET M ...

  6. ASP.NET MVC制作404跳转(非302和200)

    前言:距离上次发文已经有几个月了! 这段时间李,制作了一个博客网站,现将博客文章选一些发表到博客园,顺便为自己网站打一下广告! 产生404的原因主要有以下: 1.浏览器和爬虫:某些浏览器会请求网站的f ...

  7. ASP.NET mvc下在Controller下action的跳转方式

    在ASP.NET mvc下,action有多种挑战方式: return RedirectToAction("Index");//一个参数时在本Controller下 如果Redir ...

  8. ASP.NET MVC 防止CSRF攻击

    简介 MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)攻击的一个措施,它跟XSS(XSS又叫CSS:Cr ...

  9. 关于ASP.NET MVC中Response.Redirect和RedirectToAction的BUG (跳转后继续执行后面代码而不结束进程)以及处理方法

    关于ASP.NET MVC中Response.Redirect和RedirectToAction的BUG (跳转后继续执行后面代码而不结束进程)以及处理方法   在传统的ASP.NET中,使用Resp ...

随机推荐

  1. 小W与网格

    lucas定理 http://www.cnblogs.com/vongang/archive/2012/12/02/2798138.html 题目:http://hihocoder.com/conte ...

  2. bottle-session 0.2 : Python Package Index

    bottle-session 0.2 : Python Package Index bottle-session 0.2 Download bottle-session-0.2.tar.gz Redi ...

  3. SRM589 DV1 250 回文字符串

    其实这道题挺简单的,不过刚开始我钻了一个错误的死胡同.想明白之后才发现. 题目要求用最少的时间来将一个字符串变成回文字符串.(具体题目参看topcoder srm589 DV1 250分值的题目,不便 ...

  4. Android ListView 之 SimpleAdapter 二 (包含 item 中按钮监听)

    1    MainActivity.java package com.myadapter; import java.util.ArrayList; import java.util.HashMap; ...

  5. Asp.NET调用百度翻译

    Asp.NET调用百度翻译,图示: HTML: <%@ Page Language="C#" AutoEventWireup="true" CodeFil ...

  6. 使用nginx的rewrite实现代理指定文件夹命令方法

    使用nginx的rewrite实现代理指定文件夹命令方法 使用nginx代理Tomcat,Tomcat公布web的时候通常都是带着项目名称的. 比方项目名称为"aven".那么公布 ...

  7. Servlet的学习(一)

    初识Servlet Servlet是一门专门用于开发动态web资源的技术,Sun公司在其API中提供了一个Servlet接口(当然,我们不会去直接实现这个接口,而是去继承其实现类会更好),因此,狭义的 ...

  8. Android开发之查看应用包名package和入口activity名称的方法

    使用android自动化测试工具monkeyrunner启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法: 方法一:使用 ...

  9. jquery用div模拟一个下拉列表框

    原文 jquery用div模拟一个下拉列表框 今天分享一个用我自己用jquery写的,用div模拟下拉列表select,这个效果网上有很多,但是写一个有自己思路的代码效果,更有成就感,先看截图: 自我 ...

  10. hdu 4057 AC自己主动机+状态压缩dp

    http://acm.hdu.edu.cn/showproblem.php?pid=4057 Problem Description Dr. X is a biologist, who likes r ...