六、url跳转修复
1.若跳转的URL事先是可以确定的,包括url和参数的值,则可以在后台先配置好,url参数只需传对应url的索引即可,通过索引找到对应具体url再进行跳转;
2.若跳转的URL事先不确定,但其输入是由后台生成的(不是用户通过参数传人),则可以先生成好跳转链接然后进行签名,而跳转cg首先需要进行验证签名通过才能进行跳转;
3.若1和2都不满足,url事先无法确定,只能通过前端参数传入,则必须在跳转的时候对url进行按规则校验:即控制url是否是你们公司授权的白名单或者是符合你们公司规则的url:
function checkURL ( sURL) {return (/^(https?://)?[w-.]+.(yourDomainA|yourDomainB|yourDomainC).com($|/|)/i).test(sUrl)||(/^[w][w/.-_%]+$/i).test(sUrl)||(/^[/][^/]/i).test(sUrl) ? true : false;}
4.XSS漏洞的注意事项 :跳转url检测中也加入了CRLF头部注入漏洞的检测逻辑, 具体就是在请求参数中加入了%0d%0a这种测试代码,需要对这些参数进行删除处理(事实上:在判断到一个参数中包含 %00 -> %1f 的控制字符时都是不合法的,需对其进行删除) 。
七、如何防御
理论上讲,url跳转属于CSRF的一种,我们需要对传入的URL做有效性的认证,保证该URL来自于正确的地方,限制的方式同防止csrf一样可以包括:
1.referer的限制
如果确定传递URL参数进入的来源,我们可以通过该方式实现安全限制,保证该URL的有效性,避免恶意用户自己生成跳转链接
2.加入有效性验证Token
我们保证所有生成的链接都是来自于我们可信域的,通过在生成的链接里加入用户不可控的Token对生成的链接进行校验,可以避免用户生成自己的恶意链接从而被利用,但是如果功能本身要求比较开放,可能导致有一定的限制 。
参考:
https://juejin.cn/post/6844903772930441230
http://drops.xmd5.com/static/drops/papers-58.html
https://blog.csdn.net/pro20/article/details/105731095
https://segmentfault.com/a/1190000021968717
推荐阅读
- Linux之kali修改ssh服务配置文件允许root用户远程登录
- 动物之森气球上的礼物怎么拿 动森怎么打气球礼物
- 不惑之年是多少岁?
- 在汜水关之战中被当时默默无名的关羽斩杀的猛将是?,关羽在汜水关斩的大将
- 项羽为什么在楚汉之中会失败,楚汉相争为什么项羽会输
- 李诵在位时间,唐肃宗李亨之后是谁继位
- 丰臣秀吉之后是谁?丰臣秀吉是谁的家臣
- jenkins+Acunetix实现自动化安全测试
- 月经后8天算安全期吗
- 汉中之战后刘备的实力,汉中之战诸葛亮参与了吗?