我想确定如下的网址
javascript:alert('a');
白名单https?|ftp
That's easy enough: ^(?:https?|ftp)://
不允许使用和vbscript变量等
但是我怎样才能允许相对网址呢?
例如../../../blah和./blah也/images/img.png
换句话说是使用^(?:(?:https?|ftp)://|[./])
安全吗?
我已经四处询问,可能的解决办法可能是: parse_url
如果!scheme或scheme == http或scheme == https或scheme == ftp或scheme == mailto
答案 0 :(得分:1)
您可以使用parse_url
而不是使用正则表达式,并检查计划是空的还是http
,https
和{{1}之一}:
ftp
答案 1 :(得分:1)
另见:Sanitizing strings to make them URL and filename safe?
我正在尝试过滤此类网址 进入
<a href=""
或<img src=""
要小心,因为只用“开头”正则表达式就可以“突破”属性。例如,我可以提供http://safeurl.com" onclick="alert('xss attack')
,当您插入属性时,您将拥有:
<a href="http://safeurl.com" onclick="alert('xss attack')">
确保urlencode()值以及您正在执行的任何其他安全措施。
我可能会考虑不允许../../relative/urls
或者使用Gumbo建议使用parse_url。
查看OWASP.org上的信息以获取更多建议。