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);

            if (!string.IsNullOrEmpty(returnUrl)
                && Url.IsLocalUrl(returnUrl) //Comment out this code will cause open redirection
                )
            {
                return Redirect(returnUrl);
            }

            return RedirectToAction("Index", "Home");
        }

联想到XSS

  1. 恶意用户在正规网站下挂了跳转到恶意网站的脚本。

  2. 普通用户访问到含恶意脚本的页面会跳转到恶意网站。

  3. 恶意网站是一个仿造正规网站的登录页面,并在上面提示需要重新登录。

  4. 小白按照提示重新输入了帐号密码信息。

  5. 恶意网站保存了客户的用户名密码,然后重定向会正规网站。

  注:这种方式每次访问含恶意脚本的页面都会跳转到恶意网站(提示重新登录),而开放重定向只会提示用户名密码错误一次,相对而言,开放重定向的无感知效果要好一点。

时间: 2024-10-15 00:14:14

Web安全相关(三):开放重定向(Open Redirection)的相关文章

web—第三章XHTML

web—第三章XHTML 又是一周 我们学的了做表单:一开始我以为表单是表格.但结果:表单是以采集和提交用户输入数据的,这样讲很迷,说简单点就是登陆端.比如:Facebook.twitter.Instagram .非常强大的是表单不仅仅可以做登录端,注册.做一些像我们在网上购买东西选择数量或者是点菜的时候选票等等都可以. 首先最开始,就是理解表单是什么东西:表单的作用是什么? 其实很简单:先从表单的作用说起,表单的主要作用在于网页上提供一个图形用户界面,当用户输入正确的用户名和密码后,输入的数据

如何构建日均千万PV Web站点 (三) Sharding

     其实国内许多大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将整个网站业务分成不同的产品线,比如说国内那些大型购物交易网站它们都将自己的网站首页.商铺.订单.买家.卖家等拆分不同的产品线,分归不同的业务团队负责: 集体到技术,也会根据产品线划分,将一个网站拆分成许多不同的应用,每个应用用独立部署维护.应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址),也可以通过消息队列进行数据分发,当然最多的还是通过访问同一个数据库存储系统来构成一个关联的完整系

防止开放重定向,恶意篡改returnUrl

只能判断相对路径:http://localhost:6666/Account/Login?returnUrl=/User/Index 不能判断绝对路径:http://localhost:6666/Account/Login?returnUrl=http://localhost:6666/User/Index 1.防止开放重定向: /// <summary> /// 防止开放重定向(来自Mvc中的UrlHelper.IsLocalUrl) /// </summary> /// <

server2016下搭建web服务器&amp;三种虚拟主机实验文档

安装web服务器 首先打开server2016的服务器管理器,点击添加角色和功能如图所示: 开始之前默认下一步如图所示: 安装类型默认下一步选择基于角色或基于功能的安装如图所示: 服务器选择默认下一步如图所示: 服务器角色选择web服务器(IIS)如图所示: 功能选项一般默认即可哦如图所示: 确认下无误后点击安装如图所示: 安装完成点击关闭如图所示: 以上web服务器安装完成我们在Windows管理工具里打开如图所示: 点击打开后点到网站会有一个站点在这里我们可以进行操作更改,点击这里的web网

RobotFramework自动化测试框架-Selenium Web自动化(三)关于在RobotFramework中如何使用Selenium很全的总结(下)

本文紧接着RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)继续分享RobotFramework中如何使用Selenium进行自动化测试. 本文章节目录: 1.Get Value 2.Get Webelements和Get Webelement 3.Get Window Titles 4.Go Back 和 Go To 5.Get List Items 6.Get Selected List

Java Web(三) -- Cookie &amp; Session

中文文件下载 针对浏览器类型,对文件名字做编码处理 Firefox (Base64) , IE.Chrome ... 使用的是URLEncoder /* * 如果文件的名字带有中文,那么需要对这个文件名进行编码处理 * 如果是IE ,或者 Chrome (谷歌浏览器) ,使用URLEncoding 编码 * 如果是Firefox , 使用Base64编码 */ // 获取来访的客户端类型 String clientType = request.getHeader("User-Agent"

TinyWS —— 一个C++写的简易WEB服务器(三)

写在前面 代码已经托管在 https://git.oschina.net/augustus/TinyWS.git 可以用git clone下来.由于我可能会偶尔做一些修改,不能保证git 库上的代码与blog里的完全一致(实际上也不可能把所有的代码都贴在这里).另外,TinyWS是基于linux写的(ubuntu 14.10 + eclipse luna,eclipse工程我也push到了git库),故在Windows上可能无法正常编译(主要是系统调用 部分可能会不同). 前面的内容可参考上一篇

tomcat发布web的三种方式

一.Tomcat的下载 官方网站http://tomcat.apache.org/下载zip方式的文件. 二.安装Tomcat        1.确保系统变量中有JAVA_HOME,其值为JDK6的安装目录,如"D:\EngineerSoftware\java_jdk\Java\jdk1.7.0_67". 2.解压缩下载的zip方式的tomcat到指定的目录,如”D:\EngineerSoftware\java_tool\apache\apache-tomcat-7.0.47"

web.config中httpRedirect - 重定向单个页面

例:在下面的例子中,“目录包含page1.htm,page2.htm,page3.htm和page4.htm.如下所示的web.config文件将执行以下操作/pages/page1.htm会重定向到/newpages/newpage.htm/pages/page2.htm会重定向到谷歌/pages/page3.htm会重定向到雅虎的特定页面 <?xml version="1.0"?> <configuration>     <location path=