(转)调皮的location.href
来自 wooyun'drops --->呆子不开口
0x00 背景
随着水瓶月的到来,在祖国繁荣昌盛的今天,web系统的浏览器端也越来越重,很多的功能逻辑都放在了js中,前端的漏洞也越来越多。 我今天就说说location.href跳转的一些问题。
前端跳转常见的代码形式是:
#!javascript
location.href = "http://www.baidu.com";
在前端js中有可能是这样:
#!javascript
var hash = location.hash;
if(hash)
{
var url = hash.substring(1);
location.href = url;
}
0x01 常见的跳转漏洞
什么是跳转漏洞?突破了系统预期的跳转,就是跳转漏洞。大多数系统的预期是跳转到当前域url的http访问。
以上面的代码为例,hash值为攻击者可控,常见的漏洞形式可以为:
http://yigezangpao.com/test.html#http://jiajiba.taobao.com
这个地址会利用信任关系跳转到钓鱼网站
http://yigezangpao.com/test.html#javascript:alert(document.cookie)
这个会跳转到浏览器端的javascript协议而执行js,成了一个反射的xss,而且浏览器端的xssfilter对它无效
0x02 跳转漏洞的危害
可能的危害场景如下:
受害用户被骗点击进入了钓鱼站,可导致家破人亡妻离子散被网友拉黑……
在一些sns网站中,点击第三方网站时,可能会有安全提示,恶意网址则可利用信任域的身份,绕过了检查。
很多app带有二维码扫描功能,对本域或白名单域会不做提示,直接跳转访问。
当你扫描一个二维码的时候,你可能已经点击了一个恶意或含有某种攻击代码的网页javascript为协议的反射型xss。
一般的社区发表链接时,不会自动识别浏览器的伪协议,不会形成可点击的链接,但是利用跳转漏洞,则可以欺骗目标用户打开某个浏览器伪协议……
0x03 目前的防护的一些问题
我见到的常见的有防护有:
给变量前加"/"或者只有"/"开头的才跳转
替换变量中的":"
替换"http://"
匹配域名白名单
……
这几类或多或少有些问题,如下:
对于在变量前加/的,或者/开头才跳转的,他们预期的是控制在本域下。但当
#!javascript
location.href = "//diaoyuwangzhan.com"
时,浏览器会把后面的识别成一个标准的url来跳转,而不是一个绝对路径。
对于允许第三方跳转的,匹配域名白名单的,一定要写好正则的逻辑严格匹配url的标准格式,否则可能会被
http://yigezangpao.com.jiajiba.taobao.com
http://yigezangpao.com@jiajiba.taobao.com
http://jiajiba.taobao.com/yigezangpao.com
等绕过
对于替换”:“的防护:
twitter曾经犯过这样的错,twitter的程序员是这样改的:
#!javascript
var c = location.href.split("#!")[1];
if (c) {
window.location = c.replace(":", "");
} else {
return true;
}
结果又被如下链接干:
http://twitter.com/#!javascript::alert(document.domain);
比第一次多了个:
因为replace()函数的第一个参数,按照规范中的方式,是要用正则写的。如果第一个参数是一个字符串,javascript默认只会替换掉他找到的第一个字符
0x04 比杨幂还神奇
对于上面的替换":"的方案,如果完全替换,是不是就没有问题了呢?
如果你曾觉得你的女友不可理喻,那么当我告诉你有一个东西的不可理喻程度已经达到你女友的50%时,你一定会惊呼,”天呐,竟然还有这么变态的东西!!!“ 不错,你猜的非常对,这个不可理喻的东西就是ie浏览器
如前文的例子,如果对方已经完全替换":",你试试在ie中访问如下链接
http://yigezangpao.com/test.html#javascript:alert(1)
也就是
#!javascript
location.href = "javascript:alert(1)"
你会惊奇的发现弹了,":"是":"
的html编码,至于为什么会这样我不知道,我的是ie11,其他版本没测
0x05 解决方案
对于不允许跳转到第三方的,可以使用location.pathname来跳转,用这个跳转绝对靠谱。
有句成语”path就不是g产党员“就是修饰这个属性的,既然不是g党员,说明path是靠谱的。
对于允许跳转到第三方的,做好白名单的检查规则。
(转)调皮的location.href的更多相关文章
- 解决安卓微信浏览器中location.reload 或者 location.href失效的问题
在移动wap中,经常会使用window.location.href去跳转页面,这个方法在绝大多数浏览器中都不会 存在问题,但早上测试的同学会提出了一个bug:在安卓手机的微信自带浏览器中,这个是失效的 ...
- window.top.location.href 和 window.location.href 的区别
"window.location.href"."location.href"是本页面跳转. "parent.location.href" 是 ...
- 关于js中window.location.href,location.href,parent.location.href,top.location.href的用法
"window.location.href"."location.href"是本页面跳转 "parent.location.href"是上一 ...
- window.location.href 中文乱码问题。。。。
window.location.href 中文乱码问题.... 要解决此问题需要两次解码, 第一次解码: 是在页面中的js脚本中解码:window.location.href = "save ...
- javascript 中的location.href 并不是立即执行的,是在所在function 执行完之后执行的。
javascript 中的location.href 并不是立即执行的,是在所在function 执行完之后执行的. 1 function getUrl(tp) { if (tp == 'd') { ...
- window.open和window.location.href的几种用法
windows.open("URL","窗口名称","窗口外观设定"); <A href="javascript:windo ...
- 模板列onclick事件中绑定跳转页参数(onclick location.href Eval)
<asp:GridView runat="server" ID="gvCheckList" AutoGenerateColumns="false ...
- 基于H5的移动端开发,window.location.href在IOS系统无法触发问题
最近负责公司的微信公众号开发项目,基于H5进行开发,某些页面window.location.href在Android机上能正常运行而IOS系统上无法运行,导致无法重定向到指定页面,查了好久终于找到方法 ...
- 安卓微信浏览器中location.href失效的问题
在移动web中,经常会使用window.location.href去跳转页面,这个方法在绝大多数浏览器中都不会存在问题,但是在安卓手机的微信自带浏览器中,会出现一个奇怪的bug. window.loc ...
随机推荐
- 2018.11.16 浪在ACM 集训队第五次测试赛
2018.11.16 浪在ACM 集训队第五次测试赛 整理人:李继朋 Problem A : 参考博客:[1]朱远迪 Problem B : 参考博客: Problem C : 参考博客:[1]马鸿儒 ...
- 台州学院第十二届校赛记录(B,C,E,H,I,J,L)
传送门:点我 题目很棒,感谢出题验题的大佬们. 细节坑不少,是好事. 还是很菜,继续加油! B: 桃子的生日 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KBy ...
- CF1208
CF1208 打的话貌似能够涨分的样子? A 水题 B 枚举左端点,看看右端点的最近位置 开一个类似于桶的东西维护一下上一次出现位置 左端点左边就删掉,否则就要将上一次出现的位置删掉 时间复杂度\(O ...
- CP策略含有中文字符提交失败故障解决
硬件平台:CP5600 系统版本:R80.10 补丁版本:TAKE103 故障现象:提交新增策略失败,日志显示 if the problem persists contact Checkpoint S ...
- 【Linux】awk笔记
awk是一种处理文本文件的语言,是一个强大的文本分析工具. 实例 ①显示文件行中匹配项 # 每行按空格或TAB分割,输出文本中的1.4项 yunduo@yunduo-ThinkCentre-XXXX: ...
- 玩转MQTT-阿里云之MQTT使用(下)
玩转MQTT-阿里云之MQTT使用(下) 摘要 为使物联网项目在正式使用时,能顺利切换到具有高并发高负载能力的服务平台,对阿里云提供的MQTT服务进行使用验证. 引言 之前写“MQTT之阿里云使用-玩 ...
- 数据导出至excle
ASP.NET MVC导出Excel 首先下载 NPOI.dll 引用到项目中 建议下载地址:http://download.csdn.net/detail/pukuimin1226/5851747 ...
- OpenSsl库 Rsa的简单使用
环境的配置可以参考http://www.cnblogs.com/yangyquin/p/5284530.html 网络上传输的数据很容易被抓包,如果不加密,那么网络数 据很容易被窃取,诸如用户名.密码 ...
- 牛客练习赛$48E$ 小$w$的矩阵前$k$大元素 堆
正解:堆 解题报告: 传送门$QwQ$ 考虑把$b$从大往小排序,然后把$a_1+b_1,a_2+b_1,...,a_n+b_1$丢到堆里,顺便记录下$b$的下标 然后每次拿出一个最大值,设为$mx= ...
- $CF24D\ Broken Robot\ DP+$高斯消元
Luogu Description 你收到的礼物是一个非常聪明的机器人,行走在一块长方形的木板上.不幸的是,你知道它是坏的,表现得相当奇怪(随机).该板由n行和m列的单元格组成.机器人最初是在i行和j ...