Заповедь для параноиков: указывать сложный table_prefix при установке MODX

Сразу жути наведу: все очень плохо. Имея доступ в админку даже с самыми-самыми минимальными правами, можно поднять права пользователя до sudo довольно просто. Понятно дело, что если знать как (или если я, к примеру, выложу здесь JS-скрипт, который гарантировано сработает сейчас на любом MODX Revo сайте). Скажу только, что общий механизм работает через SQL-инъекции. И вот здесь момент: чтобы воспользоваться этим, надо знать префикс таблиц в MODX. Сейчас, к сожалению, эта информация доступна для чтения в самом браузере (находясь в админке). Если оперативно примут пулл-реквест, то обновив MODX, уже можно будет себя несколько обезопасить. Но не получится совсем обезопасить. Если у вас будет базовый префикс modx_ или какой-то простой типа prfx_, то методом перебора можно будет довольно быстро выполнить атаку (здесь всего примерно 30^4, то есть 810 000. По 10 запросов в секунду за 22 часа можно перебрать все возможные варианты). По этой причине советую сложные префиксы давать типа My_PrfX234_. Здесь уже и маленькие, и большие буквы, и цифры, а это уже 70^10 или 2824752490000000000 вариаций. Вот это уже просто времени не хватит подбирать. Если злоумышленник не будет знать префикса таблиц, SQL-инъекцию ему будет практически нереально выполнить.

А что делать с уже работающими сайтами? Как поменять им префикс таблиц? Накидал вот скрипт на изменение имен таблиц:

<?php

ini_set("max_execution_time", 0);
ignore_user_abort(true);

$current_prefix = $modx->config['table_prefix'];

$new_prefix = 'My_Prefix234_';

$stmt = $modx->query("SHOW TABLES");
$tables = $stmt->fetchAll(PDO::FETCH_NUM);
$stmt->closeCursor();

foreach ($tables as $table) {

    $table = reset($table);

    $preg = "/^{$current_prefix}/u";

    if (preg_match($preg, $table)) {
        $new_table_name = preg_replace($preg, $new_prefix, $table);
        $sql = "RENAME TABLE `{$table}` TO `{$new_table_name}`";
        if ($s = $modx->prepare($sql)) {
            $s->execute();
        }
    }
}

print "\nTables are updated";

Выполняете в консоли, после чего идете правите префикс в core/config/config.inc.php и удаляете папку core/cache.

Не забывайте про бэкапы!

UPD: Имейте ввиду, вьюхи переименовывает, но не переименовывает названия таблиц в их запросах, надо будет вьюхи пересобирать, если вы их используете.

UPD2: В общем, я нашел метод взлома без авторизации в админке. Пришлось покопаться, но метод есть и он касается всех версий MODX. Спасает только одно — кастомные префиксы таблиц и как дополнение — скрытые коннекторы.

UPD3: Весьма активное обсуждение развернулось на modx.pro