【问题标题】:Should I allow 'allow_url_fopen' in PHP?我应该在 PHP 中允许“allow_url_fopen”吗?
【发布时间】:2010-09-12 18:07:11
【问题描述】:

我们有几个开发人员要求在我们的服务器上启用allow_url_fopen。这些天的规范是什么,如果启用libcurl,真的有什么好的理由允许吗?

环境是:Windows 2003,PHP 5.2.6,FastCGI

【问题讨论】:

  • 我不会这样做。同时,大多数基于 PHP 的攻击都假定主机运行的是 linux,因此其中一些无论如何都会失败。

标签: php configuration


【解决方案1】:

您绝对希望将allow_url_include 设置为关闭,这也可以减轻allow_url_fopen 的许多风险。

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

【讨论】:

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

跨站点脚本攻击很痛苦,所以投反对票。而且您绝对应该将“allow_url_include”设置为关闭,否则您将陷入痛苦的世界。

【讨论】:

  • AFAIK 这与 XSS 无关,但与加载本地文件有关。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    这取决于开发的类型。如果您的原型设计那么启用“allow_url_fopen”就可以了,但是 libcurl 和 file_get_contents 之间没有显着的速度差异,启用它只是为了方便。

    对于生产服务器,任何对 libcurl 的调用都应标记为进行安全审核。如果启用了“allow_url_fopen”,fopen 和 file_get_contents 也应该如此。禁用 'allow_url_fopen' 并不能阻止漏洞利用,它只会稍微限制它们可以完成的方式的数量。

    【讨论】:

      【解决方案5】:

      最大的问题是 allow_url_fopen 不是更安全,所以如果你想使用 curl 从 url 保存文件,你必须从 fopen/file_get 传递来保存文件。

      • CURL 仅适用于从 URL 检索远程内容。 (不需要allow_url_fopen)
      • 如果要远程保存,必须使用 Fopen 或 File_get 添加 CURL 文件到您的服务器。 (allow_url_fopen 强制使用 CURL)

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

      【讨论】:

      • 那是不正确的;即使您碰巧使用 Curl 获取内容,您也可以在不启用 allow_url_fopen 的情况下很好地保存文件。
      猜你喜欢
      • 2013-01-19
      • 2017-10-01
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      相关资源
      最近更新 更多