首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中验证URL最安全的方法是什么?

问在PHP中验证URL最安全的方法是什么?
EN

Stack Overflow用户
提问于 2015-10-16 15:47:26
回答 1查看 2K关注 0票数 3

我正在编写一个片段,我需要验证URL,因此我知道我正在向正确的URL发送数据,为此我使用了filter_var()函数。

当我开始测试时,我开始遇到问题,这是我的代码;

代码语言:javascript
复制
<?php

function post($webLink){

    $url = filter_var($webLink, FILTER_SANITIZE_URL);

    if (filter_var($url, FILTER_VALIDATE_URL)) {

        echo 'Correct';
    }

    else {

        echo 'Please check your url.';
    }

}

    post('h://www.google.com');
?>

许多无效链接被验证为正确的urls,包括当前的urls。

被验证的链接是;

代码语言:javascript
复制
    ht1tp://www.google.com
    h://ww.google.com
    http://www.google.
    http://www.google.343

我不相信这是验证这些链接正确的函数,我想在我的if (filter_var($url, FILTER_VALIDATE_URL))行中想出什么问题。我需要澄清如何正确使用这个问题。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-16 16:06:23

首先,只验证输入。永远不要消毒输入。不要消毒,直到它准备好成为输出。这是一条全面处理数据的一般规则,对于安全显示URL和防止XSS攻击、SQL注入等都同样重要。

其次,FILTER_VALIDATE_URL基于RFC 2396验证URL。RFC没有指定任何特定的方案,但它确实给出了几个示例(即HTTP:、GOPHER:、MAILTO:等)。关于验证过滤器的PHP手册明确指出:

请注意,有效的URL可能不会指定HTTP协议http://,因此可能需要进一步验证才能确定URL使用预期的协议,例如ssh://或mailto:。

此外,RFC不定义域名的结构,也不期望任何特定的顶级域。因此,验证过滤器不检查这些。域名由注册人按照ICANN规则正式分配,但您可以配置自己的本地DNS服务器来创建任何您想要的条目,包括只创建TLD的条目,因此任何域名都是有效的,无论它是否通过验证筛选器。

验证一些定义良好的数据的最安全方法是将其白名单。如果您真的想确保没有人给您传递"ht tp:com.google.xssHackHere“,那么您需要自己做进一步的检查。请注意,现在有数百个有效的TLD,如果您想验证域名和方案,那么并不是所有的TLD都很容易用ASCII字符表示。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33174580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档