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. 如果登录链接和站点其他页面不在同一个域名,如单点登录,则需要自己去实现判断的逻辑。
 
核心代码

 1        [HttpPost]
 2         public ActionResult LogOn(LogOnModel model, string returnUrl)
 3         {
 4             //Your logon logic here.
 5             FormsAuthentication.SetAuthCookie(model.UserName, false);
 6            //Comment out this code will cause open redirection 
 7             if (!string.IsNullOrEmpty(returnUrl)&& Url.IsLocalUrl(returnUrl))
 8             {
 9                 return Redirect(returnUrl);
10             }
11             return RedirectToAction("Index", "Home");
12         }

 

联想到XSS

  1. 恶意用户在正规网站下挂了跳转到恶意网站的脚本。
  2. 普通用户访问到含恶意脚本的页面会跳转到恶意网站。
  3. 恶意网站是一个仿造正规网站的登录页面,并在上面提示需要重新登录。
  4. 小白按照提示重新输入了帐号密码信息。
  5. 恶意网站保存了客户的用户名密码,然后重定向会正规网站。
 
  注:这种方式每次访问含恶意脚本的页面都会跳转到恶意网站(提示重新登录),而开放重定向只会提示用户名密码错误一次,相对而言,开放重定向的无感知效果要好一点。  

   

源码下载

  如果大家想尝试开放重定向的效果,可以去下载代码,把判断本链接的语句Url.IsLocalUrl(returnUrl)注释掉,然后在登录页面加上想要跳转到的页面,如http://xxx.com/Account/LogOn?ReturnUrl=http://www.baidu.com。

  下载地址:https://github.com/ErikXu/OpenRedirection

 

 文章转载自:http://www.cnblogs.com/Erik_Xu/p/5497479.html


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css background size

background-position:100% 100%;转载于:https://www.cnblogs.com/rayrayray/archive/2012/03/28/2420872.html

自我修复的JVM

这篇帖子是关于一个应用程序的示例,其中解决每个IT问题的第一个解决方案(“您尝试过关闭并重新打开它”)可能适得其反,弊大于利。 我们没有关闭或重新打开设备的方法,而是拥有一个可以自愈的应用程序:它在…

微信小程序实战–集阅读与电影于一体的小程序项目(八)

31.电影详情页面 movie-template.wxml <view class"movie-container" catchtap"onMovieTap" data-movieId"{{movieId}}"> movie.js onMovieTap:function(event) {var movieId event.currentTarget.dataset.movieid;wx.navigateTo({url…

Resource接口

【转】https://blog.csdn.net/hbtj_1216/article/details/85487787 参考&#xff1a;官方文档 1 简介 Java标准库中的java.net.URL类和标准处理器对于处理低层的资源没有提供很好的功能。例如&#xff0c;并没有提供一个URL的实现能够从classpath或者ServletContext中读取资源等…

播撒汗水,收获希望!

成长 从毕业起就进入软件行业已经走过5年的风雨历程&#xff0c;自己也从浪漫主义变为了现实主义&#xff0c;马上就到了而立之年&#xff0c;顿感压力很大&#xff0c;家已成、业未立。年龄的增长、家庭的牵绊、打工上班&#xff0c;受制于人&#xff0c;自己的命运掌握在他人…

JPA实体图

JPA 2.1的最新功能之一是能够使用实体图指定获取计划。 这很有用&#xff0c;因为它允许您自定义使用查询或查找操作检索的数据。 当使用中型到大型应用程序时&#xff0c;通常以不同的方式显示来自同一实体的数据。 在其他情况下&#xff0c;您只想选择最小的信息集即可优化应…

微信小程序实战–集阅读与电影于一体的小程序项目(三)

14.wx.showToast交互反馈 wx.showToast文档 post-detail.js添加个消息提示框 onCollectionTap: function(ev) {var postsCollected wx.getStorageSync(posts_Collected)var postCollected postsCollected[this.data.currentPostId]postCollected !postCollected;postsCol…

物理路径与虚拟路径 及Web Server

新建一个网站时: 完整路径:G:\wwwroot\WebSite1 WebSite1文件夹下有文件:Default.aspx 默认虚拟路径:/WebSite1 所以访问的时候应该这样:http://localhost:14595/WebSite1/Default.aspx 虚拟路径可以随便改:如改成 /,那么访问的时候就应该这样:http://localhost:14595/Defaul…

05—15

Que&#xff1a;在C中定义的结构体怎么连接到java里&#xff1f; c里面指向指针的指针怎么用jni写接口。 Everything is about the interface!转载于:https://www.cnblogs.com/claire-study-note/archive/2011/05/15/3065508.html

Quo Vadis JUnit

对我来说&#xff0c; JUnit是Java世界上最重要的库。 但是我认为它的新版本已经过期。 通过将方法定义作为测试定义的方法&#xff0c;JUnit非常灵活&#xff0c;需要各种技巧……抱歉的功能&#xff0c;要做您实际上应该能够使用的基本&#xff08;Java 8&#xff09;语言功能…

Angstrom移植操作

英码科技的文件系统是定制的The Angstrom Distribution Linux&#xff08;以下简称Angstrom&#xff09;。Angstrom是一个界面友好的嵌入式发行版本&#xff0c;用于手持设备&#xff0c;机顶盒和网络存储设备等嵌入式设备。关于Angstrom的相关资料可以登录http://www.angstrom…

仿淘宝网站的TabPage导航效果

代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv"C…

Java SE 8新功能介绍:Lambda的遍历,过滤,处理集合和方法增强

在“ Java SE 8新功能导览”系列的这篇文章中&#xff0c;我们将深入解释并探索代码&#xff0c;以了解如何使用lambda表达式和方法引用 遍历集合 &#xff0c;并使用谓词接口过滤它们&#xff0c;实现默认方法在接口中&#xff0c;最后在接口中实现静态方法 。 在上一篇文章“…

【原】相煎何太急——input的blur事件与button的click事件

先来一段引子&#xff0c;最近在写手机h5页面&#xff0c;主要是一些登陆注册方面的&#xff0c;最绕不开的就是表单元素。 我想实现的是&#xff1a;在输入框后边有一个删除图标&#xff0c;当输入东西的时候触发事件&#xff0c;显示删除图标&#xff0c;点击该图标会删除之…

由浅入深:自己动手开发模板引擎——置换型模板引擎(一)

编辑器加载中... 转自&#xff1a;http://www.cnblogs.com/ymind/archive/2012/03/31/progressively-develop-templateEngine-yourself-replacement-type-1.html 受到群里兄弟们的竭力邀请&#xff0c;老陈终于决定来分享一下.NET下的模板引擎开发技术。本系列文章将会带您由浅…

C#锐利体验-第八讲 索引器与操作符重载(转)

第八讲 索引器与操作符重载 南京邮电学院 李建忠&#xff08;cornyfield263.net&#xff09; 索引 C#锐利体验 "Hello,World&#xff01;"程序C#语言基础介绍Microsoft.NET平台基础构造类与对象 构造器与析构器方法域与属性索引器与操作符重载 数组与字符串特征与映射…

Java EE 7 / JAX-RS 2.0:具有自定义HTTP标头的简单REST API身份验证和授权

在使用已可用的HTTP协议实施Web服务时&#xff0c;REST带来了很多便利。 通过仅通过指定的URL触发GET&#xff0c;POST和其他HTTP方法&#xff0c;您将确保通过REST服务的响应来完成某些工作。 但是&#xff0c;无论REST给开发人员带来了什么便利&#xff0c;安全性和访问控制的…

关于form标签,你该知道

有没有发现&#xff0c;自己在写模板的时候很少使用form元素&#xff0c;一来form和table总是那么傻傻分不清楚&#xff1b;二来form的特性理解不清楚&#xff0c;有了input、label来了直接就上&#xff0c;根本不用form&#xff08;不知道有没有人和我一样&#xff09;。因此&…

一个微软面试题--关于位结构体

含位域结构体的sizeof: 前面已经说过&#xff0c;位域成员不能单独被取sizeof值&#xff0c;我们这里要讨论的是含有位域的结构体的sizeof&#xff0c;只是考虑到其特殊性而将其专门列了出来。 C99规定int、unsigned int和bool可以作为位域类型&#xff0c;但编译器几乎都对此作…

easyui树形菜单实现

需求&#xff1a;读取路径配置中的相对路径获取对应的子文件夹及其子文件并形成树形结构&#xff0c;加载xml文件&#xff0c;输入搜索关键字匹配xml里面的value节点的值对应的contact值的集合并进行搜索 例如&#xff1a;输入b&#xff0c;找到xml里面的文本节点等于b的value…