我的PHP代码是否正确过滤域/路径?

时间:2014-11-19 20:12:01

标签: php url filter

我希望每个人都可以输入一个网址或域名到数据库,但我想过滤那个域或网址的路径是真的无法破解自己,所以我的代码是否正确?

<?php

$url = $_GET['url'];

if (!filter_var($url, FILTER_VALIDATE_URL)) {
    echo '*error*';
    exit;
}

?>

This is I want [Y]: http://google.com
This is I want [Y]: http://google.com/index.php

This is I want [Y]: https://google.com
This is I want [Y]: https://google.com/index.php

This is I don't want [N]: google.com
This is I don't want [N]: google.com/index.php

谢谢大家。

1 个答案:

答案 0 :(得分:0)

它会起作用但不是一个好主意:

http://www.d-mueller.de/blog/why-url-validation-with-filter_var-might-not-be-a-good-idea/

要点: 此功能存在安全问题,如XSS(跨站点脚本)攻击,这可能会伤害访问您网站的人(包括您自己)。它接受脚本警报(123);

等网址

这是一个来自网站的解决方法,不是完美的,但比普通的filter_var更好:

function validate_url($url)
{
    $url = trim($url);

    return ((strpos($url, "http://") === 0 || strpos($url, "https://") === 0) &&
            filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED | FILTER_FLAG_HOST_REQUIRED) !== false);
}