如何安全地从用户输入中转义 URL 以在file_get_contents中使用


How to safely escape URL from user input to be used in file_get_contents?

我有一个简单的问题。用户向我的 PHP 脚本提供 URL,我在其中从 URL 获取页面并解析它并向用户显示一些代码段。现在我想清理或更好地转义 URL,以便我使用 file_get_contents() 安全地获取它。

我的简化代码如下所示:

$url = $_POST['url'];
$html = file_get_contents($url);

我想到的第一件事是使用正则表达式来捕获邪恶的URL,但我认为它效率不高,最好是转义整个URL。但是我可以使用什么 PHP 函数来转义 URL 以在 file_get_contents() 函数中使用?

您可以简单地要求 url 以 http://https:// 开头。

幸运的是,PHP足够聪明,不会跟踪重定向到file://网址。
但是,它确实会重定向到ftp:// URL,因此您最好确保您的服务器在未经身份验证的情况下无法访问任何内部 ftp 服务器。

如果你想做正则表达式,看看这里:

Stackoverflow:检查字符串是否为有效 URL 的最佳正则表达式是什么?