【问题标题】:php Possible weaknesses for FILTER_VALIDATE_URL + fopen($url,"r") - url validationphp FILTER_VALIDATE_URL + fopen($url,"r") 的可能弱点 - url 验证
【发布时间】:2013-04-11 08:21:52
【问题描述】:

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

在阅读了很多关于 url 验证问题的帖子和博客之后,我决定用另外一段代码来支持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 回答。

然后我决定在PHP validation/regex for URL使用这个想法

bažmegakapa 提供使用

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

查看链接是否可以打开则表示已验证。

在此之后我的问题:

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

bažmegakapa 的代码有什么弱点吗?例如,我不知道,但是否有任何网址 fopen 无法打开它,但实际上它是一个无害的、必须验证的网址?那么你检测到的弱点有什么解决方法呢?

谢谢

最好的问候

【问题讨论】:

    标签: php filter fopen url-validation


    【解决方案1】:

    filter_var($url, FILTER_VALIDATE_URL) 认为javascript://test%0Aalert(321) 有效这一事实并不是一个弱点。如果您认为是这样,那么您对 ​​filter_var 用途的期望是错误的。

    filter_var($url, FILTER_VALIDATE_URL) 根据RFC 2396 验证 URL 的语法。

    • 并不是要判断URL指向的资源是否可访问。

    • 当 URL 由用户提供时,它并不意味着确定使用 URL 作为 HTML 文档的 a 元素中的 href 属性的值是否安全。

    • 这并不意味着要考虑该方案(这可能会对超出RFC 2396 中描述的 URL 施加限制)。比如当

      • 根据RFC 1738, 3.2 FTPftp://foo:bar@baz 是一个有效的 FTP URL,
      • 根据RFC 2616, 3.2.2 http URLhttp://foo:bar@baz 不是有效的 HTTP URL(即使某些浏览器可以解释这样的“URL”)。

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-13
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      相关资源
      最近更新 更多