代码之家  ›  专栏  ›  技术社区  ›  fire

针对XSS攻击的URL的PHP filter\u var

  •  2
  • fire  · 技术社区  · 14 年前

    我的职责是:

    function is_url($url) {
        return (preg_match('#^(https?):\/\/#i', $url) && (filter_var($url, FILTER_VALIDATE_URL) !== FALSE));
    }
    

    下面是一个很好的url,它验证为true:

    http://blah.com"onclick="alert(document.cookie)
    

    想象一下如果这进入 <a href="<?php echo $url; ?>">

    有没有更好的带有regex的URL验证器?或者我正在测试的URL实际上是一个有效的URL(在这种情况下,我需要一个XSS清理函数)?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Artefacto    14 年前

    filter :

    filter_var($url, FILTER_VALIDATE_URL);
    

    这会回来的 false 使用您的示例URL。如果它是有效的,它将返回 $url . 例子:

    glopes@nebm:~$ php -r "var_dump(filter_var('http://blah.com\"onclick=\"alert(document.cookie)', FILTER_VALIDATE_URL));"
    bool(false)
    

    htmlspecialchars . 因为它是一个属性,所以应该使用 ENT_QUOTES :

    htmlspecialchars($data, ENT_QUOTES);
    

    javascript: -比如“url”。