我应该在PHP中允许'allow_url_fopen'吗?

Kev*_*Kev 33 php configuration

我们有几个开发人员要求allow_url_fopen在我们的服务器上启用.这些天的常态是什么,如果libcurl启用,是否真的有任何理由允许?

环境是:Windows 2003,PHP 5.2.6,FastCGI

小智 20

我认为答案归结为您如何相信您的开发人员负责任地使用该功能?来自外部URL的数据应该被视为任何其他不受信任的输入,只要了解这一点,有什么大不了的?

我看待它的方式是,如果你像对待孩子一样对待你的开发人员并且从不让他们处理尖锐的事情,那么你将拥有从不学习编写安全代码的责任的开发人员.


Dan*_*ian 17

你肯定想要allow_url_include设置为Off,这也减轻了许多风险allow_url_fopen.

但是因为不是所有版本的PHP都有allow_url_include,对许多人来说,最好的做法是关闭fopen.与所有功能一样,现实情况是,如果您的应用程序不需要它,请禁用它.如果你确实需要它,curl模块可能可以做得更好,并且重构你的应用程序以使用curl禁用allow_url_fopen可能会阻止最不确定的破解者.

  • 如果我下载相同的URL并以相同的方式使用数据,为什么使用libcurl比使用file_get_contents()更安全?这是同一件事.就像使用libcurl和eval()一样,下载的内容并不比include()外部URL更安全.这只是虚假的"安全,因为烦人",就像Windows Vista问你两次,如果你真的,真的想要运行该程序. (15认同)
  • 嘿Ben,我已经看到了很多情况,其中变量被传递给include()(或fopen()),开发人员认为它们引用本地文件,但它们是引用异地存储的恶意PHP代码的URL.我可以想到为什么有人想要包含("http:// ..")的一些理智的原因,因此通过关闭该功能可以提高真正的安全性.请参见http://en.wikipedia.org/wiki/Remote_File_Inclusion (5认同)
  • 在回复“为什么使用 libcurl 比使用 file_get_contents() 更安全”时,要点是代码通常会使用 `file_get_contents()` 来打开本地文件,因此允许远程打开会导致相对容易的攻击向量来利用(它只需要一个未经清理的变量......)。如果您“知道”正在处理远程 URL,那么应该使用 cURL,您是对的,在这种情况下,安全隐患没有区别。 (3认同)
  • @Ben James:由于我们最新的商业论坛软件包以及其他过时软件的安全性下降,我们前一段时间已被破解.将allow_url_include和allow_url_fopen关闭几乎停止了每次攻击. (2认同)