前端用location.href安全漏洞的问题

代码中有 window.location.href = ${window.location.origin}/#/full-screen
报告检测出安全漏洞
Cross-Site Scripting: DOM

请问这怎么修复啊,我就是需要跳转到指定页面

我需要这么跳转的原因是,我有如下几个模块

www.baidu.com/#/full-screen 假设这是登录页面
www.baidu.com/module1/#/home
www.baidu.com/module2/#/home
www.baidu.com/module3/#/home

module1,module2,module3是ngxin路径,每个路径是一个子项目
只有www.baidu.com是有登录页面的,所以当我在www.baidu.com/module3/#/home失去登录的时候其实根路径是www.baidu.com/module3,所以这么跳转window.location.href = '/#/full-screen'其实是无法到达www.baidu.com/#/full-screen

阅读 9.1k
3 个回答

这样是不行的
window.location.href = ${window.location.origin}/#/full-screen
但是这样是可以的
window.location.href = ${origin}/#/full-screen

我感觉应该是location.origin可能被篡改,但是扫描工具不知道origin是个什么鬼东西,所以就可以了

应该是这里检测到了变量可能被控制的风险,但是如果实在 globalThis 下,这里的 origin 属性应该是只读的,不能被修改,是可以被信任的,但是在一些时候他就不能被信任了。

// 1
(function (window) {
  console.log(window.location.origin)
})({ location: { origin: 'http://xx.com' } })


// 2
{
  let window = { location: { origin: 'http://xx.com' } }
  console.log(window.location.origin)
}

根据需要你这里可以改成下面这样:

window.location.href = '/#/full-screen'

是被什么工具扫描了?

那你写死跳转地址呢?
window.location.href = www.baidu.com/#/full-screen

不然就在nginx做401重定向?或者让后端做重定向。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题