Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 允许url打开安全吗?_Php_File Get Contents - Fatal编程技术网

Php 允许url打开安全吗?

Php 允许url打开安全吗?,php,file-get-contents,Php,File Get Contents,我目前正在使用file\u get\u contents()获取给定URL的网页标题。在wamp上,这工作非常好。然而,当我把它转移到我的web服务器上时,我遇到了一个问题,这让我不得不回答这个问题。(将allow\u url\u fopen设置为1) 设置此选项是否存在重大安全风险?如果是,是否有其他方法从URL本身获取网页标题 (另外,不确定此标签,因此请在适当时随意添加/删除!) 编辑(1):进一步的研究让我提出了一个问题,它几乎说这也是一个风险,如果应用程序不需要它,就禁用它。不幸的是,

我目前正在使用
file\u get\u contents()
获取给定URL的网页标题。在wamp上,这工作非常好。然而,当我把它转移到我的web服务器上时,我遇到了一个问题,这让我不得不回答这个问题。(将
allow\u url\u fopen
设置为
1

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

(另外,不确定此标签,因此请在适当时随意添加/删除!)

编辑(1):进一步的研究让我提出了一个问题,它几乎说这也是一个风险,如果应用程序不需要它,就禁用它。不幸的是,这并没有告诉我足够的风险

编辑(2):快速说明,我将在用户输入(URL)中使用此功能,而不是在内部使用,这就是为什么我希望确保绝对没有涉及安全风险的原因。如果需要该功能,请启用它。有更好的工具可以从远程URL加载数据(比如扩展),但对于一些简单的用例来说已经足够了

它的近亲,是不安全的。它允许像和这样的函数从远程URL加载和运行代码,这是一个非常糟糕的主意。把那个关掉


在过去,它并不总是作为一个独特的选项存在,因此有必要关闭它,以防止写得不好的脚本包含来自远程URL的数据。不过,情况已经不是这样了。

这只是您可能希望将
allow\u url\u fopen
设置为0的一个原因

假设您允许用户输入url,并让服务器获取该url

您可以这样编码:-您不应该这样编码-

echo file_get_contents($_POST['url']);
问题是这里有一个安全问题。有人可以传递文件路径而不是url,并可以访问服务器的文件

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


现在,如果
allow\u url\u fopen
设置为0,那么您就不会使用
file\u get\u contents
来获取url,而是使用CURL。

请记住,allow\u url\u include可以用allow\u url\u fopen和eval关键字来模拟。尽管如此,我认为将用户限制在本地机器上几乎是不可能的。有很多方法可以访问互联网,比如卷曲和流函数。@TheWavelength:当然可以。但是
eval(file\u get\u contents($user\u input))
至少是你不太可能意外编写的东西如果您想使用curl作为文件\u get\u内容的HTTP包装器,则需要终止该设置。另请参阅:-仅供参考,因为我最近看到这一点没有引起注意,而且curl扩展被认为根本不带包装。我想听听为什么
allow\u url\u fopen
很好,如果整个问题在2016年发生变化?@Vaia仍然很好。自从我写这篇文章以来,一切都没有改变。啊,那个例子说得很清楚,谢谢!你真的应该强调你写的代码不应该被使用。人们倾向于复制/粘贴。我见过有这种漏洞的软件,它是由不称职的开发人员开发的。
Curl
不会面临与
file\u get\u contents
相同的安全威胁?好吧,我的帖子增加了一些重点。而Curl没有这个问题。经验法则通常是,如果您从外部URL(使用libcurl或任何其他方法)获取数据,则应将其视为不受信任的输入。如果您牢记这一点,获取外部数据可能是非常安全的;这一切都与您如何允许数据在服务器环境中使用有关。对于您的编辑1:此处没有答案,因此可以告诉您应用程序或代码中涉及的风险,因为只有您才能说出实际风险是什么。对于您的编辑2:您永远无法确保绝对没有涉及安全风险。但是,您可以检查您的程序,然后确保正在使用的值包含您确实期望的信息。这将为您提供应用程序按预期工作的安全性。