Поддержка Проблемы и решения Несколько сайтов на одной копии. Дыра?

  • Приветствую.
    Вроде бы нашел, через чего меня ломанули, думал я дурак, но, как мне кажется, тут и руки и фичи и баги.
    Обратимся к хелпу:
    ЧАВО/Несколько сайтов на одной копии WordPress
    Там мы видим код:

    $prefix = str_replace( array( 'www.', '-', '.' ), '', $_SERVER['HTTP_HOST'] );
    $table_prefix = $prefix . '_';

    Чтобы и аплоад писался в свою папку, то можно еще добавить
    define('UPLOADS', 'wp-content/uploads/'.$prefix);
    Код рабочий и все прекрасно. Если используются поддомены, то аррай немного переписывается.
    И что происходит?
    Заходите вы на свой сайт mysite.ru или http://www.mysite.ru, код делает префикс mysiteru, ВП видит, что таблицы не созданы и предлагает их создать, т.е. создать новый сайт.
    А вы уверены, что хостер, прописывая домен (например админкой cPanel) не создал ДНС записи, которые редиректятся к вам же? Например http://ftp.mysite.com?
    А что будет, если такая запись есть?
    Скрипт сформирует префикс ftpmysiteru, ВП определит, что таблицы нет, и предложит создать еще один новый сайт, где админом будет тот, кто его создал.
    А еще хостер может прописать в ДНС testcpanel.mysite.ru и будет еще один сайт под чужим управлением.
    В общем как-то так.

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    А что будет, если такая запись есть?

    Да, когда десять лет назад я создавал ту страницу, об этом не подумал 🙂

    На моём сайте этот фрагмент выглядит примерно так:

    
    $prefix = str_replace( array( 'www.', '-' ), '', $_SERVER['HTTP_HOST'] );
    $prefix = substr( $prefix, 0, strpos( $prefix, '.' ) );
    
    $valid_prefixes = array( 'mysite1', 'mysite2', 'mysite3' );
    if ( ! in_array( $prefix, $valid_prefixes, true ) ) {
    	header( 'Location: http://mysite1.ru/' );
    }
    
    $table_prefix = "{$prefix}_wp_";
    

    Т.е. добавлена проверка на существование префикса, всё остальное перенаправляется на главный сайт.

    Обновил и страницу в Кодексе, спасибо за сообщение 🙂

    Да Приходится делать проверку на валидность здесь.
    Но уже красоты не получается 🙂
    Тут как хорошо: в админке добавляешь новый поддомен — и махом новый сайт делаешь.

    Можно в .htaccess рубить.

    Модератор Yui

    (@fierevere)

    ゆい

    на самом деле дыра похуже, т.к. если WP у вас обслуживает сервер по умолчанию, т.е. по IP, то к этому IP можно привязать и полностью левый (не ваш) DNS, а можно даже и не привязывать, а у хакера на компе прописать в /etc/hosts
    А дальше, ставить плагины, редактировать код в редакторе…
    т.е. вполне можно себе обеспечить php shell.

    В принципе можно даже попробовать (через /etc/hosts) использовать совершенно «дикие» варианты адреса сайта, которых в природе быть не может…

    Спасибо за сообщение, на всякий случай скажу, что кодекс пополняется (пополнялся) пользовательской документацией, это ж Wiki, поэтому не удивительно, что спустя почти 10 лет в «хаках» обнаруживается совершенно реальная дыра для хакеров (хоть и зависимая от конфигурации ПО вебсервера).

    Золотое правило — никогда не доверять вводу данных, полученному извне. Проверка — обязательна.

Просмотр 3 ответов — с 1 по 3 (всего 3)