Безопасность ЛС: Раскрытие директорий в ЛС

Вряд ли это можно назвать серьезной дырой, но все же это есть:

  • Уровень опасности: низкий
  • Тип: раскрытие имени пользователя (аккаунта) на сервере
  • Версии движка, которые подвержены данной опасности: все, начиная с LS 0.4

Вызов по прямой ссылке любого модуля из директории модулей ядра ЛС вызывает ошибку, которая раскрывает полный путь в файловой системе и имя аккаунта на сервере. Например, прямое обращение в модулю кеширования:

http://site.com/engine/modules/cache/Cache.class.php

В результате получаем ошибку не нахождения класса конфига (Config):

Fatal error: Class 'Config' not found in /home/username/public_html/engine/modules/cache/Cache.class.php on line 18

В ошибке высвечивается username — имя аккаунта на сервере.

Для некоторых модулей ошибка будет связана с не нахождением класса модуля (Module)

РЕШЕНИЕ

В каждый файл в /engine/modules/*/ после 1 строки вставить код:

// prevent hacking
if (!class_exists ('Config') or !class_exists ('Module')) die ('Slow down, cowboy!');

ИЛИ (рекомендуется)

Положить в директорию /engine/modules/ файл .htaccess с следующим содержимым:

Order Deny,Allow
Deny from all


Оригинал здесь

14 комментариев

avatar
Или вынести движек за приделы паблик зоны, что со всех сторон гораздо правильней.
avatar

ИЛИ (рекомендуется)

Положить в директорию /engine/modules/ файл .htaccess с следующим содержимым:

Order Deny,Allow
Deny from all


И попробуйте что-либо создать (новый блог хотя бы)
avatar
и?..
успешно создается
avatar
у меня по такой ссылке
Ошибка HTTP 500 (Internal Server Error): Непредвиденная ситуация была обнаружена в то время как сервер пытался выполнить запрос.
avatar
на данном сервере вывод ошибок отключен
avatar
на моем же сервере ошибочка появляется
avatar
  • ort
  • +2
avatar
все ок, но в самой же


function getRequestStr($sName,$default=null,$sType=null) {
    return (string)getRequest($sName,$default,$sType);
}


(https://github.com/livestreet/livestreet/commit/c2231cd3a104970c88687699afbb68ccddbf8d48#L24R115)

можно вызвать снова ошибку приведения типов. предлагаю там сделать так:


function getRequestStr($sName,$default=null,$sType=null) {
    $val = getRequest($sName,$default,$sType);
    return (is_string ($val) ? $val : null);
}
avatar
каким образом вызвать ошибку?
avatar
print_r (gettype (getRequestStr ('plugin')));


URL
site.com/?plugin[]=yesimanarray
avatar
string

нет никаких ошибок, опиши подробнее
avatar
на версии пхп 5.4 будет ошибка
avatar
avatar
Мб конечно уже не актуально, но в 5.1 раскрытие директории возможно например ещё при косяке с подключением к mysql.
SQL Error: php_network_getaddresses: getaddrinfo failed: Имя или служба не известны at /wwwpools/u0448/site.ru/engine/modules/database/Database.class.php line 66
Array ( [code] => 2002 [message] => php_network_getaddresses: getaddrinfo failed: Имя или служба не известны [query] => mysql_connect() [context] => /wwwpools/u0448/site.ru/engine/modules/database/Database.class.php line 66 )
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.