【问题标题】:Codeigniter escapeshellarg() has been disabled for security reasons出于安全原因,Codeigniter escapeshellarg() 已被禁用
【发布时间】:2012-12-30 22:30:34
【问题描述】:

有什么办法可以重写codeigniter的Upload.php库,因为我一直在面对

escapeshellarg() 出于安全原因已被禁用

我在this thread 中尝试了将@ 放在escapeshellarg 前面的解决方案,但仍然无法上传我的图片,那就是忽略警告。

我已尝试联系我的托管服务的管理员,但出于安全原因,他们无法启用它。

我可以做些什么来欺骗这个,以便我可以上传图片?

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    你可以自己创建escapeshellarg,这是一个非常简单的函数,它只对给定字符串中的任何单引号进行转义,然后在其周围添加单引号。

    function my_escapeshellarg($input)
    {
      $input = str_replace('\'', '\\\'', $input);
    
      return '\''.$input.'\'';
    }
    

    但是,如果您的提供商禁用了 Upload.php 需要的其他功能,那么您最终可能会不走运。

    您可以通过创建一个简单的.php 文件并在其中调用phpinfo() 来查看哪些功能被禁用。 (在生成的输出中搜索disable_functions

    【讨论】:

      【解决方案2】:

      尝试在 system/libraries/Upload.php 文件中将 escapeshellarg 替换为 @escapeshellarg。

      【讨论】:

      • if (DIRECTORY_SEPARATOR !== '\\') { $cmd = 'file --brief --mime ' . @escapeshellarg ($file['tmp_name']) 。 '2>&1';
      【解决方案3】:

      这与 CI 无关。该功能已在php.ini 文件中禁用。禁用各种不安全的功能是很常见的(从服务器管理员的角度来看)。

      如果您使用的是共享主机,那么您可能无能为力。尝试询问您的提供商。

      如果您可以编辑php.ini,然后打开它,找到disable_functions 字段,然后从列表中删除escapeshellarg。然后重新启动服务器。这应该启用该功能。

      如果您仍有问题,请询问您的提供商是否可以上传内容。我的意思是,如果您的提供商有意删除了所有上传功能,那么您将浪费时间寻找一种方法。

      【讨论】:

      • 我试图询问我的提供商管理员,但出于某种安全原因,他们拒绝启用 escapeshellarg 功能,我可以欺骗它吗,比如更改代码以便我仍然可以上传我的图像?
      • 我认为找到另一种方式会更容易。例如,是否启用了 cURL 扩展?
      【解决方案4】:

      转到系统/库/Upload.php

      更换

      使用@escapeshellarg 转义

      if (DIRECTORY_SEPARATOR !== '\\') 
      { $cmd = 'file --brief --mime ' . @escapeshellarg ($file['tmp_name']) . ' 2>&1'; 
      

      【讨论】:

      • 你能分享 Upload.php 文件的完整链接吗?因为我找不到 system/libraries/Upload.php 文件
      猜你喜欢
      • 1970-01-01
      • 2015-12-05
      • 2017-10-31
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      相关资源
      最近更新 更多