我正在实现一个PHP服务,该服务允许书签应用程序获取URL的页面标题。服务器将下载HTML并提取页面标题,但这需要用户提供要获取的URL。
从安全角度考虑,我认为用户可以攻击本地主机,以查看是否存在未在外部公开的HTTP服务。
我尝试配置cURL应该使用哪个网络接口,但这要求PHP使用哪个接口进行配置。当我在像Docker这样的容器中运行此服务时,这可能是个问题,这将使工作变得更加困难。
cURL是否有一个配置选项可以阻止与本地主机的连接?
还是有办法告诉cURL仅使用外部网络接口?
答案 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返回文件系统本地文件。)