我们有几个开发人员要求allow_url_fopen
在我们的服务器上启用。这些天的规范是什么,如果libcurl
启用,真的有什么好的理由允许吗?
环境是:Windows 2003,PHP 5.2.6,FastCGI
我们有几个开发人员要求allow_url_fopen
在我们的服务器上启用。这些天的规范是什么,如果libcurl
启用,真的有什么好的理由允许吗?
环境是:Windows 2003,PHP 5.2.6,FastCGI
我认为答案归结为您对开发人员负责任地使用该功能的信任程度如何?来自外部 URL 的数据应该像任何其他不受信任的输入一样对待,只要理解这一点,有什么大不了的?
我的看法是,如果您像对待孩子一样对待您的开发人员,并且从不让他们处理尖锐的事情,那么您将拥有永远不会学习编写安全代码的责任的开发人员。
您肯定希望allow_url_include
设置为关闭,这也可以减轻许多风险allow_url_fopen
。
但是因为不是所有版本的 PHP 都有allow_url_include
,所以很多人的最佳做法是关闭 fopen。与所有功能一样,现实情况是,如果您的应用程序不需要它,请禁用它。如果您确实需要它,curl 模块可能会做得更好,并且重构您的应用程序以使用 curl 禁用allow_url_fopen
可能会阻止最不坚定的破解者。
这取决于开发的类型。如果您的原型设计那么启用“allow_url_fopen”就可以了,但是 libcurl 和 file_get_contents 之间没有显着的速度差异,启用它只是为了方便。
对于生产服务器,任何对 libcurl 的调用都应标记为进行安全审计。如果启用了“allow_url_fopen”,fopen 和 file_get_contents 也应该如此。禁用 'allow_url_fopen' 并不能阻止漏洞利用,它只会稍微限制它们可以完成的方式数量。
跨站点脚本攻击很痛苦,所以投反对票。而且您绝对应该将“ allow_url_include ”设置为关闭,否则您将陷入痛苦的世界。
最大的问题是allow_url_fopen 不是更安全的,所以如果你想使用 curl 从 url 保存文件,你必须从 fopen/file_get 传递来保存文件。
- CURL 仅适用于从 URL 检索远程内容。 (allow_url_fopen 不是必需的)
- 如果要将远程文件保存到服务器,则必须使用 Fopen 或 File_get 添加 CURL。 (allow_url_fopen 必须使用 CURL)
PHP 必须找到其他方法来使其更加安全。