allow_url_fopen安全吗?

时间:2014-06-04 23:58:45

标签: php file-get-contents

我目前正在使用file_get_contents()来获取网页的标题,并给出了网址。在wamp上,这非常好用。但是,当我将其转移到我的网络服务器时,我遇到了一个问题,导致我this回答。 (将allow_url_fopen设置为1)。

设置此功能是否存在重大安全风险?如果是,是否有其他方法可以从URL本身获取网页标题?

(另外,不确定标签,所以如果合适,请随意添加/删除!)

编辑(1):进一步的研究引导我this问题,这几乎说明它也是一种风险,并且如果应用程序不需要它也会禁用它。不幸的是,这并没有告诉我所涉及的风险。

编辑(2):快速注释,我将使用此功能与用户输入(URL),而不是内部,这就是为什么我要确保绝对没有涉及安全风险

2 个答案:

答案 0 :(得分:9)

这只是您可能希望allow_url_fopen设置为0

的一个原因

假设您允许用户输入网址,并让您的服务器获取此网址。

你可能会编码这样的代码: - 你不应该这样做 -

echo file_get_contents($_POST['url']);

问题是这里存在安全问题。有人可以传递文件路径而不是URL,并且可以访问服务器的文件。

例如,有人可能会将/etc/passwd作为网址传递,并且可以查看其内容。

现在,如果将allow_url_fopen设置为0,则不会使用file_get_contents来获取网址,而是使用CURL。

答案 1 :(得分:8)

allow_url_fopen没问题。如果您需要该功能,请启用它。有更好的工具可以从远程URL(例如curl扩展名)加载数据,但它对于一些简单的用例来说已经足够了。

它的近亲allow_url_include 安全。它允许include()require()等函数从远程URL加载和运行代码,这是一个非常糟糕的主意。让那一个关掉。

过去,allow_url_include并不总是作为一个独特的选项存在,因此必须关闭allow_url_fopen以防止编写错误的脚本包含来自远程URL的数据。但事实并非如此。