allow_url_fopen安全吗?

Sai*_*nan 8 php file-get-contents

file_get_contents()鉴于URL,我目前正在使用获取网页的标题.在wamp上,这非常好用.但是,当我把它转移到我的网络服务器时,我遇到了一个问题,它引导我得到这个答案.(这是设置allow_url_fopen1).

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

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

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

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

Mau*_*ury 9

这只是您可能希望allow_url_fopen设置为0的一个原因

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

您可能会编写类似这样的代码: - 您不应该对此进行编码 -

echo file_get_contents($_POST['url']);
Run Code Online (Sandbox Code Playgroud)

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

例如,有人可能会传递/etc/passwd为url,并且能够查看其内容.

现在,如果allow_url_fopen设置为0,则不会file_get_contents用于获取URL,您将使用CURL.

  • `Curl` 不会面临与 `file_get_contents` 相同的安全威胁吗? (2认同)

dus*_*uff 8

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

它密切相关的allow_url_include,是不是安全的.它允许功能,如include()require()加载和从远程URL运行代码,这是一个非常糟糕的主意.让那一个关掉.

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