Комментарии

Галерея

Опрос

Из каких стран идет больше всего спама, попыток взлома на ваши серверы?:

GLPI & Nginx & php-fastcgi - The action you have requested is not allowed. Заметка

Аватар пользователя maximum
     

После установки GLPI возникает ошибка "The action you have requested is not allowed. Reload previous page before doing action again."
Ошибка появляется из-за условия проверки REQUEST_URI в include.php
Решить можно двумя способами на выбор:
1. Секцию конфигурационного файла nginx приводим к следующему виду:

location ~ .php$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /path_to_glpi$fastcgi_script_name;
fastcgi_param  QUERY_STRING     $query_string;
fastcgi_param  REQUEST_METHOD   $request_method;
fastcgi_param  CONTENT_TYPE     $content_type;
fastcgi_param  CONTENT_LENGTH   $content_length;
fastcgi_param REQUEST_URI       $request_uri;
}

2. Открываем inc/include.php и комментируем все строки:

// Security : check CSRF token
// No CSRF check if a plugin is not compliant
if (GLPI_USE_CSRF_CHECK
   && isset($_POST) && is_array($_POST) && count($_POST)
   && Plugin::isAllPluginsCSRFCompliant()) {
   // No ajax pages
   if (!preg_match(':'.$CFG_GLPI['root_doc'].'(/plugins/[^/]*|)/ajax/:', $_SERVER['REQUEST_URI'])) {
      if (!Session::validateCSRF($_POST)) {
         Html::displayErrorAndDie("The action you have requested is not allowed. Reload previous page before doing action again.", true);
      }
   }
}
Аватар пользователя isn

Добавлю по первому пункту:

В конфигурации Nginx по-умолчанию идет файл настроек /etc/nginx/fastcgi_params
следующего содержания:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
 
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;
 
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
 
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
 
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Поэтому в первом варианте достаточно так:

location ~ \.php$ {
include fastcgi_params;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}