href js改变link_link标签href属性DOM XSS笔记

本文探讨了通过href属性设置链接并利用javascript:伪协议引发的DOM XSS漏洞。文中提到,通过url query string参数设置href,可以执行JavaScript代码。尽管存在正则表达式修复方案,但浏览器的换行解析特性使其失效。为解决这个问题,文章提出了一种新的防御策略,即创建临时的``标签,解析hostname并检查是否在预设的白名单中,以防止非预期的javascript:链接执行。
摘要由CSDN通过智能技术生成

场景:获取 url query string 中的参数 url 作为 标签 href 属性的值

大致代码:

// 获取参数

s = urlQuery("url");

// url decode 一次

url = decodeURIComponent(s);

// 字符串拼接

back = '';

e.html(back);

这里的 escapeURL 函数会对 &<>'" 符号进行html实体编码

{&: "&", <:>: ">", ": """, ': "'"}

所以无法闭合,但是可以通过 javascript: 伪协议来执行 js 代码

javascript: alert(document.domain)

某开发想的 正则修复方案 ,大致代码如下:

function check(e) {

var t = /(javascript|data)(:|:)/i;

return t.test(e) ? "" : e

}

即忽略大小写匹配 javascript: 字符串

但浏览器有一个特性,在解析时,会忽略换行,比如下列代码,仍会执行

test

所以 url 参数设置为 j%0d%0aavascript: alert(document.domain) &

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值