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

时间:2012-04-30 13:15:22

标签: upload codeigniter-2

当我想以任何形式上传任何内容时,我在我的网站上看到警告:出于安全原因已禁用了escapeshellarg()消息。我该怎么做才能解决这个问题?

我的框架是codeigniter最终版本。

以下是完整警告:

A PHP Error was encountered

Severity: Warning

Message: escapeshellarg() has been disabled for security reasons

Filename: libraries/Upload.php

4 个答案:

答案 0 :(得分:7)

@运算符将使函数可能引发的任何PHP错误无声。 你永远不应该使用它!

解决方案:

  1. escapeshellarg文件中的disable_functions

  2. 中删除php.ini字符串
  3. 要求您的主机提供商删除如果您无法访问escapeshellarg文件,请从php.ini文件中的disable_functions删除php.ini字符串

  4. 制作您自己的escapeshellarg。该函数仅转义给定字符串中的任何单引号,然后在其周围添加单引号。

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

    并做这样的事情:

    // $cmd = 'file --brief --mime ' . escapeshellarg($file['tmp_name']) . ' 2>&1';
    $cmd = 'file --brief --mime ' . my_escapeshellarg($file['tmp_name']) . ' 2>&1';
    

    但最好的方法是扩展Upload.php库并覆盖_file_mime_type函数而不是更改CodeIgniter的核心,这样如果您想更新CodeIgniter,就不会丢失它。 / p>

    有用的链接:https://www.codeigniter.com/user_guide/general/core_classes.html

答案 1 :(得分:5)

尝试

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

从system / libraries文件夹中打开Upload.php文件,并将@放在escapeshellarg($file['tmp_name'])前面第1066行  第二件事是在application / libraries文件夹下上传这个文件会更好,其他没问题,你可以替换系统的Upload.php文件。

答案 2 :(得分:2)

  1. 从php.ini *文件中的disable_functions中删除escapeshellarg字符串

  2. 如果您无法访问php.ini *文件,请让您的托管服务提供商删除上面的字符串

  3. 更改允许运行escapeshellarg函数的托管服务提供商。

  4. 来自此网站:http://www.2by2host.com/articles/php-errors-faq/disabled_escapeshellarg/

答案 3 :(得分:2)

解决此问题的另一种简单方法是将您的应用从development移至production

在您的应用程序根目录中打开index.php并更改

define('ENVIRONMENT', 'development');

define('ENVIRONMENT', 'production');