php FILTER_VALIDATE_URL + fopen的可能弱点($ url,“r”) - url验证

时间:2013-04-11 08:21:52

标签: php filter fopen url-validation

我网站上的网址会包含国际字符,例如şğı ...

在阅读了大量关于网址验证问题的帖子和博客后,我决定支持filter_var($url, FILTER_VALIDATE_URL)以及其他代码,因为

  1. 如果url有int。字符,网址无法验证
  2. http://www.d-mueller.de/blog/why-url-validation-with-filter_var-might-not-be-a-good-idea/bažmegakapa以+7回答。
  3. 然后我在PHP validation/regex for URL

    结束了这个想法

    bažmegakapa提供使用

    if (preg_match("#^https?://.+#", $link) and @fopen($link,"r")) echo "OK";

    查看是否可以打开链接,这意味着它已经过验证。

    在此之后我的问题:

    问题 - 我喜欢这个想法&在我看来非常棒。但是在看到它只有+7并且该页面有+>> 7个答案之后,我想问一下php大师的想法是什么,他们很乐意回答这个问题,以帮助喜欢像我这样的人;新秀。

    bažmegakapa的代码有什么缺点吗?例如,我不知道,但是有没有任何网址,fopen无法打开它,但实际上它是一个无害的,必须验证的网址?那么你发现的弱点的治疗方法是什么呢?

    谢谢

    最好的问候

1 个答案:

答案 0 :(得分:2)

filter_var($url, FILTER_VALIDATE_URL)认为javascript://test%0Aalert(321)有效的事实不是弱点。如果您认为是这样,您对filter_var所针对的期望是错误的。

filter_var($url, FILTER_VALIDATE_URL)验证针对RFC 2396的网址的语法。

  • 这并不意味着确定URL指向的资源是否可访问。
  • 当用户提供URL时,并不意味着确定将URL用作HTML文档的href元素中a属性的值是否安全。< / LI>
  • 这并不是要考虑该方案(可能会对超出RFC 2396中所述内容的URL设置限制)。例如,

    • ftp://foo:bar@baz是根据RFC 1738, 3.2 FTP
    • 的有效FTP网址 根据{{​​3}},
    • http://foo:bar@baz 是有效的HTTP网址(即使某些浏览器可以解释此类“网址”)。

filter_var不烘烤蛋糕,也不煮咖啡。如果您需要蛋糕或咖啡,请使用其他东西(RFC 2616, 3.2.2 http URL是一个好的开始)。

根据具体情况,显示指向服务器无法访问的资源的URL可能是一个好主意或一个坏主意。根据具体情况,显示不指向HTTP或HTTPS资源的URL可能是一个好主意或一个坏主意。一种尺寸并不适合所有人。