如何防止cURL连接到本地主机?

时间:2019-01-14 13:44:56

标签: php security curl localhost

我正在实现一个PHP服务,该服务允许书签应用程序获取URL的页面标题。服务器将下载HTML并提取页面标题,但这需要用户提供要获取的URL。

从安全角度考虑,我认为用户可以攻击本地主机,以查看是否存在未在外部公开的HTTP服务。

我尝试配置cURL应该使用哪个网络接口,但这要求PHP使用哪个接口进行配置。当我在像Docker这样的容器中运行此服务时,这可能是个问题,这将使工作变得更加困难。

cURL是否有一个配置选项可以阻止与本地主机的连接?

还是有办法告诉cURL仅使用外部网络接口?

1 个答案:

答案 0 :(得分:2)

检查this answer,尤其是此代码

$info=parse_url($url);
$host=strtolower($info["host"]);
if ($host === "localhost" || ((false !== filter_var ( $host, FILTER_VALIDATE_IP )) && (false === filter_var ( $host, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE )))) {
    $errors [] = "localhost and LAN IP URLs are not allowed.";
}

(但是,如参考答案中所述,您可能还应该注意黑客提供的非HTTP网址,例如file:///etc/passwd,这会使curl返回文件系统本地文件。)