【问题标题】:CURL vs allow_url_fopen Which is safer for getting images?CURL 与 allow_url_fopen 获取图像哪个更安全?
【发布时间】:2011-07-05 19:04:18
【问题描述】:

我有一个脚本,用户可以输入图像 URL(来自另一个网站),然后使用 JS 对其进行裁剪并将其保存在我的服务器上。

我的问题是......从另一台服务器获取图像时,使用 CURL 或 allow_url_fopen(通过 file_get_contents())是否更安全?或者是否有首选/更安全的方法可用?

安全性对我来说是一个大问题,因为我知道这是一个非常危险的过程 - 如果有影响,该脚本只需要处理图像文件。

谢谢

【问题讨论】:

    标签: php security curl


    【解决方案1】:

    curl 的错误处理比file_get_contents() 好很多。如果你关心这一点,curl 可能是要走的路。不过,如果一个简单的“糟糕,那行不通”对您来说就足够了,那么file_get_contents() 是一个完全可以接受的捷径。

    【讨论】:

      【解决方案2】:

      首先,如果您想深入讨论安全问题。如果您不知道自己在做什么,下载文件实际上是一个安全问题。

      在某些情况下,您可以覆盖重要文件甚至覆盖系统文件。在服务器上上传脚本等以通过 Web 服务器执行它们也是一个问题。

      所以这里不像人们指出的那样是阳光和彩虹。

      回到你的问题,allow_url_fopen 是一个配置指令。我假设您的意思是file_get_contents()。要么会做得很好。正如其他人指出的那样,Curl 有点冗长,而且速度也更快。

      如果您最终使用了 file_get_contents(),请确保永远不要将未过滤的变量作为参数。

      【讨论】:

        【解决方案3】:

        下载文件根本不是安全问题,无论是您的服务器还是您自己的计算机,还是您用于下载它的应用程序/代码:) 而是您是否正在执行文件:D

        您所要做的就是确保您不会在文件中执行/包含任何内容。由于您只是要裁剪图像,因此我认为您很好:)

        我建议使用 cURL,allow_url_fopen 可能会在代码的其他地方引发安全问题。

        【讨论】:

          【解决方案4】:

          cURL 有更多的选择和可能性。

          两者同样安全(如果误用则不安全)。

          使用 cURL 更明智,因为您将通过更强大的功能提升您的体验,这可能会在未来的项目中为您服务。

          此外,如果这个项目稍后需要新功能,如果 file_get_contents 不够,您将不必使用 cURL 重写所有内容。

          这个帖子的答案显示了一个不错的 cURL 函数:Replace file_get_content() with cURL?

          【讨论】:

            【解决方案5】:

            curl 通常是一种更安全的方式。您需要做出明确的设计/编码决定,以允许 curl 的结果直接影响您的程序,而允许 f*() 函数中的 url 会让

            include('http://example.com/really_nasty_remote_takeover.php');
            

            没有错误发生。

            【讨论】:

            • include() 由更严格的allow_url_include 控制,而不是allow_url_fopen。使用file_get_contents() 是无害的。
            猜你喜欢
            • 2014-11-16
            • 2014-07-25
            • 1970-01-01
            • 2016-10-04
            • 2011-11-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-22
            相关资源
            最近更新 更多