Помощь ajax запрос в ДЛЕ выдает Hacking attempt

Тема в разделе "DLE", создана пользователем danneo, 25 ноя 2013.

Информация :
Актуальная версия DataLife Engine 11.2
( Final Release v.11.2 | Скачать DataLife Engine | Скачать 11.2 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 11.1 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Модераторы: killoff
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.445
    Симпатии:
    113
    хочу вывести зависимые списки на ajax. Отправляю json методом get (с id параметром). Обратно должен придти массив. А ответ сервера приходит "Hacking attempt!"
    В обработчике (файл php, которому отправляется id через ajax) лежит код выборки записей из БД и формирование массива.
    Я понимаю, что это защита DLE от прямого обращения к файлу. Но как решить данную проблему-то?
    Вывод планируется как в админке, так и для пользователя.
     
  2. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.116
    Симпатии:
    2.131
    Точка входа для AJAX не должна быть защищена от прямого вызова. Однако к ней должна быть привязана проверка авторизации.
     
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.445
    Симпатии:
    113
    это я уже понял... а можно конкретнее, что нужно написать в php файле? Я только практику набираю в этом деле...
     
  4. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.116
    Симпатии:
    2.131
    PHP:
    if( !defined'DATALIFEENGINE' ) OR !defined'LOGGED_IN' ) ) {
        die( 
    "Hacking attempt!" );
    }
    Этот кусок кода запрещает прямое обращение... Его писать не надо. Ну и конечно, чтобы подключить сторонние файлы надо написать:
    PHP:
    @error_reporting E_ALL E_WARNING E_NOTICE ); //Настраиваем вывод ошибок
    @ini_set 'display_errors'true );
    @
    ini_set 'html_errors'false ); 
    @
    ini_set 'error_reporting'E_ALL E_WARNING E_NOTICE );

    define'DATALIFEENGINE'true ); //Разрешаем подключение файлов ДЛЕ
    define'ROOT_DIR'substrdirname(  __FILE__ ), 0, -12 ) ); //Задаём папку скрипта (код верен для папки /engine/ajax/)
    define'ENGINE_DIR'ROOT_DIR '/engine' ); //Задаём папку ядра

    include ENGINE_DIR '/data/config.php'//Подключаем конфиг
     
    shirdipro и danneo нравится это.
  5. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.445
    Симпатии:
    113
    Еще подскажи, пожалуйста, что нужно для безопасности, типа куков, авторизации, уровня доступа и т.п.?
     
  6. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.116
    Симпатии:
    2.131
    Стандартные проверки авторизации и прочее. Открой любой файлик из папки AJAX - там всё будет прописано, а имено:
    1) Подгрузка конфига
    2) Проверка логина
    3) Проверка групп пользователей
     
  7. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.445
    Симпатии:
    113
    А как file-ajax.php при обращении к нему через POST создает сессию, проверку логинов и т.п.? К нему же не браузер обращается...
     
  8. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.116
    Симпатии:
    2.131
    А кто ж к нему тогда обращается? :D К нему обращается браузер, но только не переходом по url, а через JavaScript... Но по сути, разницы нет. Обращение всё равно делает браузер и передаёт все необходимые заголовки, включая сессию и куки.