Web安全相关(三):开放重定向(Open Redirection)
简介
那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL。这种篡改就被称为开发重定向攻击。
场景分析
假设有一个正规网站http://nerddinner.com/,还有一个恶意网站或钓鱼网站http://nerddiner.com/(注意:这里少了个n)。
一天,小白收到了别人发的链接:http://nerddinner.com/Account/LogOn?returnUrl=http://nerddiner.com。
1. 打开链接后进入了登录界面,小白输入了自己的帐号名密码进行登录。
2. 登录成功后重定向到了恶意网站。
3. 恶意网站是一个仿造正规网站的登录页面,并在上面提示用户名或密码错误。
4. 小白按照提示重新输入了帐号密码信息。
5. 恶意网站保存了客户的用户名密码,然后重定向会正规网站。
6. 小白继续平时正常的操作。
防止开放重定向
防止开发重定向只需要判断重定向的链接是本地的链接或者是合法的链接即可。
1. 如果登录链接和站点其他页面都在同一个域名,在ASP.MVC中可以用Url.IsLocalUrl(string url)来判断。
2. 如果登录链接和站点其他页面不在同一个域名,如单点登录,则需要自己去实现判断的逻辑。
核心代码
- [HttpPost]
- public ActionResult LogOn(LogOnModel model, string returnUrl)
- {
- //Your logon logic here.
- FormsAuthentication.SetAuthCookie(model.UserName, false);
- //Comment out this code will cause open redirection
- if (!string.IsNullOrEmpty(returnUrl)&& Url.IsLocalUrl(returnUrl))
- {
- return Redirect(returnUrl);
- }
- return RedirectToAction("Index", "Home");
- }
联想到XSS
1. 恶意用户在正规网站下挂了跳转到恶意网站的脚本。
2. 普通用户访问到含恶意脚本的页面会跳转到恶意网站。
3. 恶意网站是一个仿造正规网站的登录页面,并在上面提示需要重新登录。
4. 小白按照提示重新输入了帐号密码信息。
5. 恶意网站保存了客户的用户名密码,然后重定向会正规网站。
注:这种方式每次访问含恶意脚本的页面都会跳转到恶意网站(提示重新登录),而开放重定向只会提示用户名密码错误一次,相对而言,开放重定向的无感知效果要好一点。
源码下载
如果大家想尝试开放重定向的效果,可以去下载代码,把判断本链接的语句Url.IsLocalUrl(returnUrl)注释掉,然后在登录页面加上想要跳转到的页面,如http://xxx.com/Account/LogOn?ReturnUrl=http://www.baidu.com。
文章转载自:http://www.cnblogs.com/Erik_Xu/p/5497479.html
Web安全相关(三):开放重定向(Open Redirection)的更多相关文章
- Web安全相关(三):开放重定向(Open Redirection)
简介 那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL.这种篡改就被称为开发重定向攻击. 场景分析 假设有一个正规网站http:// ...
- 开放重定向(Open Redirection)
简介 那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL.这种篡改就被称为开发重定向攻击. 场景分析 假设有一个正规网站http://ne ...
- 5、Web应用程序中的安全向量 -- Open Redirect Attack(开放重定向)
开放重定向攻击的概念:那些通过请求(如查询字符串和表单数据)指定重定向URL的Web应用程序可能会被篡改,而把用户重定向到外部的恶意URL. 在执行重定向之前需先检查目标地址的有效性,可使用Url.I ...
- Apache Struts 多个开放重定向漏洞(CVE-2013-2248)
漏洞版本: Struts < 2.3.15.1 漏洞描述: BUGTRAQ ID: 61196 CVE(CAN) ID: CVE-2013-2248 Struts2 是第二代基于Model-Vi ...
- web—第三章XHTML
web—第三章XHTML 又是一周 我们学的了做表单:一开始我以为表单是表格.但结果:表单是以采集和提交用户输入数据的,这样讲很迷,说简单点就是登陆端.比如:Facebook.twitter.Ins ...
- 通过Web.config实现301重定向
通过Web.config实现301重定向 IIS7以上可以通过修改Web.config实现IIS设置 现在我们通过Web.config实现301重定向 <system.webServer> ...
- win2008主机IIS7.x 关于web.config设置301重定向
win2008主机IIS7.x 关于web.config设置301重定向 要求:windows主机是IIS7.0或以上的版本 方法如下: 在网站的根目录下新建web.config文件并将一下代码加入到 ...
- WordPress 开放重定向漏洞
漏洞名称: WordPress 开放重定向漏洞 CNNVD编号: CNNVD-201309-167 发布时间: 2013-09-13 更新时间: 2013-09-13 危害等级: 高危 漏洞类型: ...
- 防止开放重定向,恶意篡改returnUrl
1.防止开放重定向: /// <summary> /// 防止开放重定向 /// </summary> /// <param name="url"&g ...
随机推荐
- 面向对象之ajax
1.Ajax发送请求的几个步骤 1. 创建 XMLHttpRequest 对象 var xhr = new XMLHttpRequest();//IE6 使用var xhr= new ActiveXO ...
- 【JVM】jvm启动参数
-server -Xmx2048m -Xms1500m -Xmn1024m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConc ...
- Azure CLI2.0 捕获Linux ARM非托管磁盘虚拟机并创建ARM托管磁盘虚拟机
1.系统内部取消预配VM,创建了测试文件目录及文件:hlm20180904/ hlm20180904.txt 2.使用CLI2.0创建VM映像 a.登陆CLI2.0 备注:在 Azure 中国区使用 ...
- 晦涩难懂的shell命令
初学shell脚本,过程中发现许多不易于理解的脚本语言,网上各种查找学习之后,择优精简一番,做出以下总结,方便以后遗忘了回顾,也为像我一样的初学者提供方便——推荐给初学者的一本书:<Linux ...
- leetcode-73-矩阵置零
题目描述: 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1, ...
- jQuery 动画用法
jQuery动画: <head> <meta charset="UTF-8"> <title>Title</title> <s ...
- Java 访问权限控制:你真的了解 protected 关键字吗?
摘要: 对于类的成员而言,其能否被其他类所访问,取决于该成员的修饰词:而对于一个类而言,其能否被其他类所访问,也取决于该类的修饰词.在Java中,类成员访问权限修饰词有四类:private,无(包访问 ...
- java并行之parallelStream与CompletableFuture比较
1. import java.util.Arrays; import java.util.List; import java.util.concurrent.CompletableFuture; im ...
- dede修改文章页命名规则
一.DEDEcms 修改默认文章命名规则 1.单独添加分类默认修改,修改文件:include/common.inc.php. 大概在251行文档的命名规则 $cfg_df_namerule = '{ ...
- mysql数据库基本知识
一.库操作 创建数据库:creat database 'mydababase1';creat database if not exists 'mydababase1' //只有两个选项 查询数据库: ...