过滤输出PHP的URL

时间:2011-05-02 10:22:51

标签: php security

我想确定如下的网址 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

2 个答案:

答案 0 :(得分:1)

您可以使用parse_url而不是使用正则表达式,并检查计划是空的还是httphttps和{{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上的信息以获取更多建议。