[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Определить метод запроса к файлу
j120
Всем привет.

Задача стоит определить метод запроса к файлу, задача странная, но требуется только теория

Имеем файл index.php с примерно следующим содержанием:

<?php

function
a()
{
...
}
function b()
{
...
}
switch ($_GET['name'])
{
case 'a' : a(); break;
case 'b' : b(); break;
}

?>


Всё предельно просто, есть две функции, если в URL написано index.php?name=a, то отрабатывает a(), если в URL написано index.php?name=b, то отрабатывает b();

Допустим функция a(), при загрузке страницы index.php?name=a, содержит скрипт асинхронного запроса, обращающегося на URL index.php?name=b.
Нужно любым способом отличить как произошло обращение к адресу index.php?name=b, был ли он вбит в браузерную строку или это асинхронный запрос.
Подойдут любые средства, сессии, скрипты, редиректы, что угодно, нужно не дать обратиться к index.php?name=b асинхронным запросом.
Это вообще реально? Можно по заголовкам попробовать узнать, но ведь их и подделать можно.

Интересует теория, что-то глаз замылился, не могу понять это достижимо или нет.
Спасибо.
FatCat
Цитата (j120 @ 28.11.2018 - 19:33)
скрипт асинхронного запроса, обращающегося на URL index.php?name=b.

Добавь еще один параметр, по которому будешь отличать.

_____________
Бесплатному сыру в дырки не заглядывают...
Эли4ка
Цитата
Нужно любым способом отличить как произошло обращение к адресу index.php?name=b, был ли он вбит в браузерную строку или это асинхронный запрос.
Подойдут любые средства, сессии, скрипты, редиректы, что угодно, нужно не дать обратиться к index.php?name=b асинхронным запросом.

$_SERVER['HTTP_REFERER']

:o
j120
Вы меня неправильно поняли оба... Как же объяснить...

Мне не для устройства логики приложения, а для того чтобы напрочь запретить асинхронному запросу обратиться на другой адрес, любым способом это выявив, чтобы пресечь.

FatCat, ваш способ говорит, что убрав параметр можно обмануть скрипт.
Эли4ка, этот параметр можно подделать.

Я предполагаю что такое отследить нереально, пришёл сюда, чтобы в этом точно убедиться. Оно либо да, либо нет. Сложность не волнует, мне бы решение найти, если оно есть.
brevis
Асинхронный запрос должен проходить в пределах внутренней сети, на ip-адрес, доступ к которому закрыт извне. Или на 127.0.0.1, если все происходит на одном сервере.

P.S. Что-то я тут перечитал сообщения и подумал, что надо уточнить: асинхронный запрос шлет что? Сервер или клиент (ajax). Если сервер -- то этого достаточно:
Цитата
Добавь еще один параметр, по которому будешь отличать.
Если клиент -- то, кажется, никак.

_____________
Чатик в телеге
Эли4ка
Цитата
Мне не для устройства логики приложения, а для того чтобы напрочь запретить асинхронному запросу обратиться на другой адрес, любым способом это выявив, чтобы пресечь.

FatCat, ваш способ говорит, что убрав параметр можно обмануть скрипт.
Эли4ка, этот параметр можно подделать.

Я предполагаю что такое отследить нереально, пришёл сюда, чтобы в этом точно убедиться. Оно либо да, либо нет. Сложность не волнует, мне бы решение найти, если оно есть.

Все можно подделать. Просто это критично?
Не понимаю, вот пришел $_SERVER['HTTP_REFERER'] на name=b от name=a вы его блокирнули и все, в чем проблема?
depp
Цитата (brevis @ 28.11.2018 - 23:00)
Асинхронный запрос должен проходить в пределах внутренней сети

что?
автору:
	function is_async() {
return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false;
}
sergeiss
j120, а давай по-другому посмотрим на задачу. С какой целью вообще это надо сделать? Возможно, что задачу можно перефразировать и решение будет совершенно другим.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
j120
sergeiss, давайте по другому посмотрим на задачу, конечно, как скажете...

Два разных разработчика пишут два скрипта. Каждый на выданном ему URL`е на одном домене. Каждый пишет js-скрипт атаки на URL соперника, его задача асинхронным запросом получить данные, которые выдаёт скрипт соперника.

И есть третья сторона, задача которой отследить атаку и произвести редирект, чтобы очистить скрипты атаки одного и загрузить скрипты атаки второго. Если этого невозможно сделать, значит единственный вариант, который я сейчас рассматриваю - это подправить код браузера так, чтобы если производится запрос на URL, отличный от предыдущего запрошенного, то веб-сервер пошлёт инструкцию, которую браузер поймёт и закрыв текущую вкладку откроет запрошенный URL. Это гарантирует, что один скрипт не сможет получить данные другого скрипта внутри домена. Вот какая задача, хотелось бы избежать доработки браузера.

HTTP_X_REQUESTED_WITH можно подделать, или это достаточно достоверный заголовок? Задача непростая, у нас тут просто конкурсы проводятся в коллективе)
sergeiss
Если честно, то задача выглядит несколько бредово smile.gif Если это какое-то соревнование программистов, то почему 3-я сторона, сидящая на том же домене, не имеет полной инфы?
Цитата (j120 @ 30.11.2018 - 18:59)
чтобы если производится запрос на URL, отличный от предыдущего запрошенного

Кто (что) мешает хранить эту инфу в БД или в памяти сервера?


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
j120
Третья сторона как раз имеет полную инфу, задача третьей стороны не дать двум хитрым взломщикам получить результат вывода скрипта соперника. Пусть хоть у каждого отдельная БД со своими паролями, какая разница, предположим каждый скрипт выводит md5 хэш, который лежит в БД. Третья сторона первой пишет код, перед определением функций a() и b().

Нужно до switch ($_GET['name']) определить как была вызвана работа скрипта. Решение depp пока справляется со своей задачей, посмотрим что будет дальше...
brevis
Цитата (sergeiss @ 30.11.2018 - 22:35)
Если честно, то задача выглядит несколько бредово :)

Похоже на special olympics на знание основ протокола http :)

Цитата (j120 @ 1.12.2018 - 12:07)
Решение depp пока справляется со своей задачей, посмотрим что будет дальше...
curl -H "X-Requested-With: XMLHttpRequest" http://domain/index.php?name=b
тебя удивит

_____________
Чатик в телеге
j120
brevis, только наоборот, при получении этого заголовка скрипт как раз и останавливается..
brevis
Ну надеюсь ты понимаешь, что этим заголовком можно свободно управлять.
Ну а там уже смотрите сами. Если этого достаточно -- то замечательно. Удачи в конкурсе!

_____________
Чатик в телеге
j120
brevis, нет, решение не найдено, кроме как принудительная команда браузеру перезагрузить страницу, два скрипта внутри домена не изолировать друг от друга. Что и требовалось доказать...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.