Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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
我应该允许';允许url打开';在PHP中?_Php_Configuration - Fatal编程技术网

我应该允许';允许url打开';在PHP中?

我应该允许';允许url打开';在PHP中?,php,configuration,Php,Configuration,我们有几个开发人员要求在我们的服务器上启用allow\u url\u fopen。现在的标准是什么?如果启用了libcurl,真的有什么好的理由允许吗 环境是:Windows 2003、PHP 5.2.6、FastCGI您肯定希望将允许url\u包含设置为关闭,这也减轻了允许url\u打开的许多风险 但由于并非所有版本的PHP都有allow\u url\u include,因此对许多人来说,最好的做法是关闭fopen。与所有功能一样,实际情况是,如果应用程序不需要它,请禁用它。如果您确实需要它,

我们有几个开发人员要求在我们的服务器上启用
allow\u url\u fopen
。现在的标准是什么?如果启用了
libcurl
,真的有什么好的理由允许吗


环境是:Windows 2003、PHP 5.2.6、FastCGI

您肯定希望将
允许url\u包含设置为关闭,这也减轻了
允许url\u打开的许多风险


但由于并非所有版本的PHP都有
allow\u url\u include
,因此对许多人来说,最好的做法是关闭fopen。与所有功能一样,实际情况是,如果应用程序不需要它,请禁用它。如果您确实需要它,curl模块可能会做得更好,并且重构您的应用程序以使用curl禁用
allow\u url\u fopen
可能会阻止最不果断的破解者。

跨站点脚本攻击是一种痛苦,因此投票反对。你绝对应该将“”设置为off,否则你会受到伤害。

我认为答案可以归结为你对开发人员的信任程度如何,他们是否会负责任地使用该功能?来自外部URL的数据应该像其他不受信任的输入一样对待,只要理解了这一点,有什么大不了的


我的看法是,如果你像对待孩子一样对待你的开发人员,从不让他们处理尖锐的事情,那么你将有一些开发人员永远不会学习编写安全代码的责任

这取决于开发类型。如果您进行了原型设计,那么启用“allow\u url\u fopen”就可以了,但是libcurl和file\u get\u内容之间的速度差别不大,启用它只是为了方便


对于生产服务器,任何对libcurl的调用都应该标记为进行安全审计。如果启用了“允许url\u fopen”,则fopen和file\u应该获取内容。禁用“allow\u url\u fopen”并不能阻止利用漏洞,它只是稍微限制了可以使用的方法的数量。

最大的问题是,allow\u url\u fopen的安全性不高,因此如果要使用curl从url保存文件,必须通过fopen/file\u get来保存文件

  • CURL仅适用于从URL检索远程内容。 (不需要允许url打开)
  • 如果要保存远程文件,必须将CURL与Fopen或File_get一起添加 将文件发送到服务器。 (允许用卷曲强制打开url)

Php必须找到其他方法使其更加安全

嘿,Ben,我见过很多这样的情况:变量被传递到include()(或fopen()),开发人员认为这些变量引用了本地文件,但实际上它们是引用存储在异地的恶意PHP代码的URL。我想不出有什么合理的理由让任何人都想加入(”http://..)从而通过关闭该功能来提高真正的安全性。请看@Ben James:由于我们最新的商业论坛软件包和其他过时软件的安全性下降,我们不久前就被破解了。关闭allow\u url\u include和allow\u url\u fopen几乎可以阻止所有攻击。如果我下载相同的url并以相同的方式使用数据,为什么使用libcurl比使用file\u get\u contents()更安全?是一样的。正如使用libcurl和eval()下载内容并不比包含()外部url更安全。这只是假装的“恼人的安全性”,就像Windows Vista两次问你是否真的真的想运行该程序。仍然是这样吗?在回答“为什么使用libcurl比使用file\u get\u contents()更安全”时,重点是代码通常会使用
file\u get\u contents()
打开本地文件,因此允许远程打开导致攻击向量相对容易开发(它只需要一个未消毒变量…)。如果您知道您正在处理一个远程URL,那么应该使用cURL,您是对的,在这种情况下,安全含义没有区别。我不会这样做。同时,大多数基于PHP的攻击都假设主机运行linux,因此有些攻击无论如何都会失败;即使您碰巧使用Curl.AFAIK获取了内容,也可以在不启用allow_url_fopen的情况下保存文件。这与XSS无关,而是与加载本地文件有关。