Безопастность
|
|
DreamOff | Дата: Воскресенье, 15 Сентября 2013, 20:27 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Здравствуйте друзья. Столкнулся с такой проблемой : в моем проекте в при авторизации скрипт регистрирует сессию и выполняет header("Location: main.php"); main.php у меня начинается со ледующих строк
Код <?php DEFINE("_GAMEEVF",1); .....
?>
во всех файлах идет в первую очередь проверка
Код <?php defined( '_GAMEEVF' ) or die( 'Прямой вызов запрещен !' ); ?>
в чем собственно проблема : как приведено выше , в головном скрипте создается константа и во всех остальных скриптах в первую очередь идет проверка на существование этой константы в противном случае скрипт завершается , сделано это для того , чтобы случайно зашедшие индивидумы не могли каким либо образом вызывать скрипты по отдельности (на прямую).
Но в один перкрасный момент мне понадобилось воспользоваться AJAX и тут возникла проблема , скрипты подгружаемые ajax не видят существующую константу и сразу завершаются. каким образом можно обойти эту неприятную особенность ? Как мне передать константу скрипту использующую ajax чтобы ajax невозможно было выполнить напрямую.
|
|
| |
lvovand | Дата: Воскресенье, 15 Сентября 2013, 20:30 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| в аяксовом скрипте вызови вначале session_start() и скрипт будет также работать с переменными, хранящимися в сессии
Разработка и продвижение сайтов. Дизайн
|
|
| |
DreamOff | Дата: Воскресенье, 15 Сентября 2013, 20:32 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| дело не в сессии ! мне надо отказать в прямом вызове скрипта .
|
|
| |
lvovand | Дата: Воскресенье, 15 Сентября 2013, 20:57 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| запутал, если честно
Цитата (DreamOff) скрипты подгружаемые ajax не видят существующую константу и сразу завершаются. вынеси определение константы в отдельный файл и подключай его в аяксовых скриптах
Цитата (DreamOff) мне надо отказать в прямом вызове скрипта можно проверять HTTP_REFERER, но это не панацея, так как заголовок передается браузером и его подделать можно, а создавая переменную при авторизации и сохраняя ее в куках или в сессии, можешь ее проверять в любом скрипте
Разработка и продвижение сайтов. Дизайн
|
|
| |
DreamOff | Дата: Воскресенье, 15 Сентября 2013, 21:04 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Распутываю :)) Есть 2 скрипта (один грузится во второй ajaxом)
в головном создается константа во втором проверяется её существование. во втором проверка всегда приводит к провалу так как грузясь ajax скрипту не передается константа .
выносить не вариант так как тогда при обращении к скрипту напрямую этот файл с константой всеравно приинклудится.
в сессии и куках хранить уже ближе к разгадке , но есть тут один минус , ничего не мешает клиенту авторизироваться (тем самым зарегистрировать сессию или куки) и после этого гулять по файлам вызывая их напрямую .
|
|
| |
lvovand | Дата: Воскресенье, 15 Сентября 2013, 21:51 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| проверяй REFERER, он скажет из какого файла был вызов скрипта, но повторюсь, что не панацея, так как подделать можно
через сессию попробуй обойти, но костыль как ни крути: - при загрузке нужной страницы с которой можно вызывать скрипты, устанавливай переменную, может ее к времени привязать - в аяксовом скрипте проверяешь эту метку, и если к времени привязана, то разницу по времени можешь смотреть
Добавлено (15.09.2013, 21:51) --------------------------------------------- чем так уж прямо напугали прямые вызовы скриптов (про аяксовые скрипты если что вопрос)?
Разработка и продвижение сайтов. Дизайн
Сообщение отредактировал lvovand - Воскресенье, 15 Сентября 2013, 21:55 |
|
| |
DreamOff | Дата: Воскресенье, 15 Сентября 2013, 22:32 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| на мой взгляд это более емкий способ как с точки зрения написания кода так и с точки зрения выполнения скрипта оградится от ненужных запросов , прикрывание разного рода дыр . повторюсь - на мой взгляд (возможно я ошибаюсь и данный метод не так эффективен , не исключаю что есть более интересные возможности ограничить доступ в те места куда людям лезть неположено )
|
|
| |
lvovand | Дата: Воскресенье, 15 Сентября 2013, 22:51 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| "те места" - если обычные папки с изображениями и прочим, так запретить можно туда в принципе вход извне и выполнение в них любых скриптов,
если профи возьмется, он найдет способ обращаться к php-скрипту напрямую, вопрос что он от этого получит
Разработка и продвижение сайтов. Дизайн
|
|
| |
DreamOff | Дата: Воскресенье, 15 Сентября 2013, 22:53 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| речь идет только о php скриптах
|
|
| |
lvovand | Дата: Воскресенье, 15 Сентября 2013, 23:12 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| о пхп, вот ты настроил htaccess, проверку реферер,дополнительную переменную и т.д., и все что в адресе вводится переводится на index.php но есть ajax.php так или иначе должен вызываться, правильно я понимаю?
и как не изголяться все равно будет способ вызвать этот файл напрямую, вопрос то в чем: что получит вызвавший его напрямую, если пользователь должен быть авторизован, настроена система на ограничение запросов с одного адреса, настроена фильтрация всего что приходит извне, то что он такого сделает, вызвав скрипт напрямую?
Разработка и продвижение сайтов. Дизайн
|
|
| |
Быдлокодер | Дата: Понедельник, 16 Сентября 2013, 08:47 | Сообщение # 11 |
частый гость
Сейчас нет на сайте
| DreamOff, как я понял у тебя есть роутер, просто добавь маршрут для своего скрипта, и вызывай по аяксу свой новый маршрут, и все будет радостно.
|
|
| |
DreamOff | Дата: Понедельник, 16 Сентября 2013, 11:03 | Сообщение # 12 |
был не раз
Сейчас нет на сайте
| lvovand, это принцип защиты как в CMS Joomla , с помощью константы мы ограничиваем доступ к вызову скрипта - если человек вызывает скрипт напрямую то ему выдается ошибка так как константа определяется в головном файле . Если к примеру у меня много файлов и система организованна по принципу MVC то если я буду в каждом скрипте писать по 2-5 строк всяких проверок авторизации и т.д то скрипт будет выполяться долше , а так как скрипт заранее задумывается как высоконагруженный то эти лишние миллисекунды недопустимы (имхо).
Быдлокодер, вы немогли бы по подробнее рассказать ? Заранее благодарю.
|
|
| |
lvovand | Дата: Понедельник, 16 Сентября 2013, 11:24 | Сообщение # 13 |
старожил
Сейчас нет на сайте
| DreamOff, фреймворки с MVC и cms джумла подразумевают перенаправление на index.php, в котором уже идет обработка вызова, подключение файлов и т.д. (при том что в подключаемых модулях уязвимостей хватает) перенаправление настроил через .htacces и всего делов, можешь даже страницу с ошибкой выдавать, если кто напрямую к файлу обращается.
Ты же говоришь о том, что тебе важно, чтобы вызов аяксового файла шел с определенной страницы сайта, а не напрямую или не так тебя понял?
Разработка и продвижение сайтов. Дизайн
Сообщение отредактировал lvovand - Понедельник, 16 Сентября 2013, 11:25 |
|
| |
Быдлокодер | Дата: Понедельник, 16 Сентября 2013, 13:02 | Сообщение # 14 |
частый гость
Сейчас нет на сайте
| DreamOff, для подробностей надо видеть внутренности, но смысл в том что раз у тебя идет роутер через главный файл, то просто обращайся к скрипту как к остальным маршрутам на сайте.
Допустим для регистрации у тебя адрес что то вроде site.ru/reg, тогда для твоего аякса сделай site.ru/my_fucking_ajax. Вроде все просто.
|
|
| |