佚名通过本文主要向大家介绍了javascript跳转url,javascript url,javascript url编码,javascript 获取url,javascript:jump2url等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:JavaScript 语言精粹关于解析 URL 正则问题
描述:
解决方案1:
描述:
第68页讲解url的正则
var parse_url = /^(?:(A-Za-z)+:)?(\/{0,3})(0-9.\-A-Za-z]+)(?::(\d+))?**(?:\/([^?#]*))**?(?:\?([^#]*))?(?:#(.*))?$/;
说 (?:\/([^?#]*))
这个 [^?#]
会有渗漏的风险。
请问:
- 什么时候会有这种风险呢?
- 严谨的url正则应该怎么写?
- 为什么schema后面匹配的是(\/{0,3})?
解决方案1:
一、会有什么风险
刚好jQuery
源码中也有匹配URL
相关的正则表达式,看这里http://bugs.jquery.com/ticket/9521
就会知道不安全的#
可能会引起xss
问题。
有一个例子提到如果在url的后面有这么一段hash#p=<img src%3D/%20onerror%3Dalert(1)>
,而由于src
指向的地址不存在就会触发后面的onerror
监听函数,那么就可以做其他坏事了,举例这里只是alert(1)
。
参考: https://twitter.com/bulkneets/statuses/156620076160786432
三、schema后面为什么是0-3个的/
,
1. 如果省略掉了前面schema了,那么/
可能就是不需要的
如没有http:
就可以不要//
了,直接www.baidu.com
就好了,不用http://www.baidu.com
有了schema后,后跟两个
/
就比较常见了,如http://
,ftp://
;一个
/
的情况,可能是相对路径吧,举例就像~/user/123
三个
/
的情况,其实是file:///