Компонент с AJAX вопрос по безопасности с defined('_VALID_MOS')

Тема в разделе "Программирование", создана пользователем Jarikus, 25.11.2007.

  1. Offline

    Jarikus Недавно здесь

    Регистрация:
    25.11.2007
    Сообщения:
    1
    Симпатии:
    0
    Решил прикрепить к своему компоненту, AJAX. Начал с библиотеки Ext JS, но проблема актуальна и для других библиотек.

    Вкратце о рабочей среде: есть два файла один стандартный для компонента "admin.cname.html.php" другой серверный обработчик AJAX запросов "ajax_handler.php". Привожу относящиеся к теме содержимое этих файлов

    ---------------------------------admin.cname.html.php------------------------------
    <?php
    defined('_VALID_MOS') or die('Доступ запрещен.');
    ?>

    <SCRIPT>
    Ext.onReady(function(){
    Ext.get('okButton').on('click', function(){
    var msg = Ext.get("msg");
    msg.load({
    url: "<?php echo $mosConfig_live_site; ?>ajax_handler.php",
    params: "name=" + Ext.get('name').dom.value,
    text: "Загрузка..."
    });
    msg.show();
    });
    });
    </SCRIPT>
    <div id="msg" style="visibility: hidden"></div>
    Name: <input type="text" id="name" /><br />
    <input type="button" id="okButton" value="OK" width="40px" />

    ------------------------------admin.cname.html.php---------------------------------

    ------------------------------ajax_handler.php--------------------------------------

    <?php

    if(isset($_POST['name'])) {
    echo 'Answer Server: '.$_POST['name'];
    }
    ?>

    ------------------------------ajax_handler.php--------------------------------------

    Суть работы не хитрая, в файле admin.cname.html.php есть скрытый блок <DIV> с ID=MSG, в поле NAME вводим сообщение и при нажатии кнопки JavaScript передает, методом POST, сообщение нашему обработчику ajax_handler.php. Обработчик возвращает обратно в admin.cname.html.php, строку "Answer Server: Сообщение", эта строка появляется в блоке <DIV> с ID=MSG, естественно без перезагрузки страницы 8) .

    Этот простой пример можно реализовать на любой библиотеке AJAX. Но! Вы наверняка заметили что в файле ajax_handler.php, нету "секюрной" строки:
    defined('_VALID_MOS') or die('Доступ запрещен.');
    Ее там нету не потому что я забыл ее вставить ;D , а потому что такой метод безопасности не работает с внешним обработчиком, его мы вызываем как внешний файл и он не имеет константы _VALID_MOS!!!! :(
    Значит, мой обработчик можно вызвать по "абсолютному" пути:

    http://server/joomla/administrator/components/com_cname/ajax_handler.php

    потом передать необходимые переменны методом POST и практически получить доступ к админскому компоненту без аутентификации!!! И к тому же такие переменные как "$mosConfig_live_site" тоже работать не будут. :'(

    Вопрос: как реализовать безопасность в таких обработчиках, которые не связаны с обще системой, а запускаются отдельно из JavaScript-та?
     
  2.  
  3. Dead Krolik
    Offline

    Dead Krolik специалист

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Ответ: Компонент с AJAX вопрос по безопасности с defined('_VALID_MOS')

    $mosConfig_live_site можно получить просто включив файл "../../../и_сколько_надо_точек/configuration.php"
     
  4. Cardinal
    Offline

    Cardinal Недавно здесь

    Регистрация:
    19.07.2007
    Сообщения:
    82
    Симпатии:
    1
    Пол:
    Мужской
    Ответ: Компонент с AJAX вопрос по безопасности с defined('_VALID_MOS')

    Dead Krolik, а с _VALID_MOS как быть? и классами базы? инклудить database.php, только так?
     
  5. Dead Krolik
    Offline

    Dead Krolik специалист

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Ответ: Компонент с AJAX вопрос по безопасности с defined('_VALID_MOS')

    Cardinal, теме аж пять месяцев. Может не стоит кидать непонятную фразу не по теме и ставить в конце знак вопроса? :)
     
  6. Cardinal
    Offline

    Cardinal Недавно здесь

    Регистрация:
    19.07.2007
    Сообщения:
    82
    Симпатии:
    1
    Пол:
    Мужской
    Ответ: Компонент с AJAX вопрос по безопасности с defined('_VALID_MOS')

    я думаю, стоит:) Ведь я воспользовался поиском по форуму сначала;)

    Возникла проблема - в компоненте есть аякс, разумеется, во внешнем файле все полезное происходит, ajax.php, на который и посылается аякс-запрос (или как правильно сказать, не знаю:)) В этом файле неоткуда взятся этой константе, да и всему остальному от джумлы, как быть с безопасностью, и как вообще надо делать)?
     
  7. Dead Krolik
    Offline

    Dead Krolik специалист

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Ответ: Компонент с AJAX вопрос по безопасности с defined('_VALID_MOS')

    Аякс.пхп идет в топку. В документации я ясно написал выход - использовать index2.php.
     

Поделиться этой страницей

Загрузка...