http协议中规定 301,302 可以让Web服务器告诉浏览器,你访问的这个地址我需要进行跳转,具体的跳转地址我在Location这个值里面说了。你按照这个里面的值跳转到新的地址就好了。
那么这里服务器如果对跳转后的地址没有进行校验的话,会在某些场景下,让客户跳转到不是本来要去的地址(比如恶意的钓鱼地址,黄色网站,赌博网站等等)。
具体的场景主要发生在做sso登录的时候,我们知道,有很多网站,刚开始时可以不需要登录的,等你点击了某些需要登录的地址的时候,系统才转到登录地址,让你输入用户名、密码登录,登录成功后,会自动跳转到你之前浏览到地址。
那么,这里登录成功后自动跳转的地方,就是可能会出现上述存在安全问题的地方了。通过伪造跳转地址,可以骗过本来应该跳转的真实地址,转而跳转到构造后的恶意地址。
有几种方式来构造恶意地址(针对安全检查机制不完善的):
1、 通过在跳转URL中增加@符号来实现跳转,你可以在浏览器中(Chrome)测试一下这个地址: https://[email protected] ,你会发现你访问后,不是打开的百度,而是打开的新浪。 所以我们通过构造类似这样的地址来跳转到恶意地址
2、通过在跳转URL中增加?符号来实现跳转,你可以在URL中这样设置
https://www.sina.com.cn?www.baidu.com 这样www.baidu.com变成了前面恶意地址到参数了
3、通过在跳转URL中增加/符号来实现跳转。和?类似。
因此在做跳转逻辑的时候,后端需要对前端传来的跳转地址进行校验,符合条件的才进行跳转,否则跳转到固定的正常也没。
评论区