PHP :: $_SERVER['REQUEST_URI']

CyberX

Заблокирован
12.07.2018
54
34
BIT
0
Кароче такая хренова произошла. В моей самопальной CMS хитрая система ROUTE, которая перехватывает request uri и переписывает его чтобы отдать контроллеру.

Так вот при этом в строке браузера путь не менялся раньше, а внутренняя переменная отправляла данные куда мне надо, но коварный fetch JS(новый AJAX) каким то образом прохавал обратную связь с сервером и меняет URL в браузере на этот гребенный внутренний подмененный адрес. При этом паскуда не говорит, что это редирект, но матерится, если я делаю компенсацию возврата оригинального request uri после точки входа в контроллер на множественные перенаправления.

По факту редиректом это не считает ни Google ни Яндекс ни браузер, о чем говорит вкладка network и заголовки страниц.

Скажите такой чит это все таки редирект или нет?

Мне в принципе cрать и я придумал ставить две куки которые будут индуцировать положение на форуме и в каком-то топике и через history api корректировать URL потому что пользователю нужен реальный адрес страницы, а не мой общий ROUTE коллектора контроллера.

Как еще можно скормить браузеру адрес, который мне нужен с сохранением перезаписи $_SERVER['REQUEST_URI']?

Почитаю все варианты, завтра хочу комитета BETA модуля форума.
 

CyberX

Заблокирован
12.07.2018
54
34
BIT
0
Кароче, выключил JS в браузере - пути нормальные. При включенном обращении через fetch есть какая-то обратная связь с сервером и он мне подменяет ROUTE.
Уязвимость или нет не знаю, но знающий об этом человек может визуально обмануть посетителя отправив на fake адрес и там облутав все необходимое(ха-ха). У меня это правда в бескорыстных целях используется :D Вы теперь знаете как стырить данные карточки или пароли состричь беспалива. Думаю несложный shell из этого получается неплохой.

Кароче решил так. Ставлю на разделе Куку и на топике Куку. Дальше чекаю путь и правлю history api. Работает как надо - у пользователя реальный адрес. На SEO тоже не влияет.

PHP:
/* check boards route */
$BRD = explode('/forum/boards/', $_SERVER['REQUEST_URI']);

if( isset($BRD[1]) ) {

    if( !empty($BRD[1]) ) {

        $boardSegment = explode('/', $BRD[1]);
        define('BOARD_ROUTE_ID', (int)$boardSegment[0]);

        if( $boardSegment[1] === 'edit' && empty($boardSegment[2]) ) {
            $_SERVER['REQUEST_URI'] = '/forum/boards/edit/';
            setcookie("forumTopic", '', time() + 3600, '/');
        }

        if( is_numeric($boardSegment[0]) && empty($boardSegment[1]) ) {
            $_SERVER['REQUEST_URI'] = '/forum/boards/';
            setcookie("forumBoard", (int)$boardSegment[0], time() + 3600, '/');
            setcookie("forumTopic", '', time() + 3600, '/');
        }

        if( is_numeric($boardSegment[0]) && $boardSegment[1] === 'create' ) {
            $_SERVER['REQUEST_URI'] = '/forum/boards/create/';
            setcookie("forumTopic", '', time() + 3600, '/');
        }

        if( is_numeric(  $boardSegment[0] ) && is_numeric( $boardSegment[1] ) && empty( $boardSegment[2] ) ) {
            $_SERVER['REQUEST_URI'] = '/forum/boards/view/';

            define('BOARD_TOPIC_ID', (int)$boardSegment[1]);
            setcookie("forumBoard", (int)$boardSegment[0], time() + 3600, '/');
            setcookie("forumTopic", (int)$boardSegment[1], time() + 3600, '/');
        }
    }
}
else {
    setcookie("forumBoard", '', time() + 3600, '/');
    setcookie("forumTopic", '', time() + 3600, '/');
}

JavaScript:
        // fix forum path
        let pathCheck = document.location.href.split('forum');

        if( pathCheck[1] ) {

            let fixPath  = getCookie('forumBoard') ? location.protocol +'//'+ document.location.host +'/forum/boards/'+ getCookie('forumBoard') + '/' : '';
                fixPath += getCookie('forumTopic') ? getCookie('forumTopic') + '/' : '';

            if( fixPath.length ) {

                $.location('TEST',fixPath);

                console.log( fixPath );
            }

        }
]

p.s.: еще хочу на своей 50Kb библиотеке frontend RevolveR, которая мне весь jQuery заменяет написать червяка, но это в будущем. Будет использована технология скрытого Timeout, когда запущенный код не отследить после убийства таймера, а сама программа выполняется беспалива.


Мне осталось сделать редактирование тем и перемещение между разделами, пара правок насчет заголовков и description и собсно, я написал форум. Еще день работы.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!