我目前正在使用file_get_contents()
来获取网页的标题,并给出了网址。在wamp上,这非常好用。但是,当我将其转移到我的网络服务器时,我遇到了一个问题,导致我this回答。 (将allow_url_fopen
设置为1
)。
设置此功能是否存在重大安全风险?如果是,是否有其他方法可以从URL本身获取网页标题?
(另外,不确定标签,所以如果合适,请随意添加/删除!)
编辑(1):进一步的研究引导我this问题,这几乎说明它也是一种风险,并且如果应用程序不需要它也会禁用它。不幸的是,这并没有告诉我所涉及的风险。
编辑(2):快速注释,我将使用此功能与用户输入(URL),而不是内部,这就是为什么我要确保绝对没有涉及安全风险
答案 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的数据。但事实并非如此。