Передача значений переменных компоненту

Тема в разделе "Создание расширений для Joomla", создана пользователем valoo, 26.01.2008.

  1. Offline

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

    Регистрация:
    30.09.2007
    Сообщения:
    18
    Симпатии:
    0
    Люди, помогите!

    Написал свой компонент com_gal, но он не хочет принимать переменные из файлов.

    Например, я передаю ему значение переменной $letter вот так:

    http://localhost/Joomla/index.php?option=com_gal&Itemid=33&letter=1

    Затем пытаюсь ее увидеть в одном из инклюдированных файлов:
    Основной файл - gal.php, а в нем - include('myfile.php');

    В myfile.php пишу echo $letter; - и ни фига не водится на экран: (.

    Чего-то не так, да?

    Заранее спасибо, кто подскажет!
     
  2.  
  3. Cardinal
    Offline

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

    Регистрация:
    19.07.2007
    Сообщения:
    82
    Симпатии:
    1
    Пол:
    Мужской
    Ответ: Передача значений переменных компоненту

    $letter=$_GET['letter'];
    echo $letter;
     
  4. Dead Krolik
    Offline

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

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Ответ: Передача значений переменных компоненту

    Знать что такое register_globals. Узнать про функцию mosGetParam(). Читать раздел программирования на доксах.
     
  5. Offline

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

    Регистрация:
    30.09.2007
    Сообщения:
    18
    Симпатии:
    0
    Ответ: Передача значений переменных компоненту

    Спасибо! :)
     
  6. Dead Krolik
    Offline

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

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Ответ: Передача значений переменных компоненту

    valoo за такой код расстреливать надо :hi:
     
  7. Cardinal
    Offline

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

    Регистрация:
    19.07.2007
    Сообщения:
    82
    Симпатии:
    1
    Пол:
    Мужской
    Ответ: Передача значений переменных компоненту

    ...согласен, почитал про нормальные способы :[
     
  8. Offline

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

    Регистрация:
    30.09.2007
    Сообщения:
    18
    Симпатии:
    0
    Ответ: Передача значений переменных компоненту

    Кого расстреливать, меня или Кардинала? )))))))))))))
    Dead Krolik, я читал Ваши статьи. Собственно, о том, как написать свой компонент для Джумлы, я прочел у Вас и написал все как Вы советуете.
    Только вот про передачу переменных Вы там ничего не говорили, а потому пришлось изобретать свой велосипед ((((((((
    А с подачи Кардинала определил в головном файле компонента эту переменную - и все заработало.
    До этого я использовал $task, но это крайне неудобным показалось ...

    $letter=mosGetParam($_REQUEST,letter,0); тоже работает, спасибо!

    Уважьте, гляньте - ))))))))))) http://www.100litsa.org/index.php?option=com_gal&Itemid=56


    ЗЫ. Если будете на сайте моем - смотрите через IE, под другие броузеры я пока его не настраивал.
     
    Последнее редактирование: 31.01.2008
  9. Cardinal
    Offline

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

    Регистрация:
    19.07.2007
    Сообщения:
    82
    Симпатии:
    1
    Пол:
    Мужской
    Ответ: Передача значений переменных компоненту

    valoo, меня-меня :) Правильнее через mosGetParam()...а сайты лучше по ходу разработки под все браузеры подгонять, потом гораздо тяжелее может быть...
     
  10. Dead Krolik
    Offline

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

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Ответ: Передача значений переменных компоненту

    Взглянув на компонент советую почитать чего-нибудь умное про htmlspecialchars и xss, потому что делать echo переменной запроса это плохо, хотя бы тем, что можно что угодно в тело страницы добавлять, если менять эту переменную.
     
  11. Offline

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

    Регистрация:
    30.09.2007
    Сообщения:
    18
    Симпатии:
    0
    Ответ: Передача значений переменных компоненту

    Dead Krolik, перефразируя классика, я бы сказал, что "Вы пишете смачно, но пишете мало.." ))))))))))
    Позвольте дать совет - войдите в наше положение!
    В положение программистов, всю жизнь писаших "закрытые коды" на С/C++, VB, и прочих "нормальных" языках, и не помышлявших о взломщиках и прочих траблах ...
    Если мне удобно пользоваться "эхом" в ПХП, то и я пишу как мне пишется, и про "bad gays" как-то думать в облом ...
    Короче ..
    Напишите "нормальным" человечным языком, этаким ЧПУ для "чайников" что-то типа Вашей методички по созданию простого компонента ..
    мол, ребята, не будьте идиотами и не переносите ваши древние привычки по использованию Global- Pוublic и прочей фигни ... в великом и могучем ПХП )))))))))))))))))
     
  12. Dead Krolik
    Offline

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

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Ответ: Передача значений переменных компоненту

    Ну, во-первых на доксах я написал статью о безопасном программировании. Там самые азы. В том числе и XSS. Если я пишу мало - это значит, что об этом я уже писал. Если бы я толкал что-то новое - я бы все подробно расписал.

    Впрочем я ведь тоже не с рождения на php програмлю. Я еще MSVC 6.0 немного люблю.
     
  13. Offline

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

    Регистрация:
    30.09.2007
    Сообщения:
    18
    Симпатии:
    0
    Ответ: Передача значений переменных компоненту

    Dead Krolik, войдите в положение любого, кто осваивает Джумлу параллельно с РНР!
    До сих пор мало кто из нас не задумывался о безопасности обычных кодов (вирусы - не в счет!). Теперь получается, что если мне нужно, к примеру, вывести в цикле с помощью "эха" на экран таблицу с переменным числом ячеек - я должен думать не о том, как написать код, а о том, что кто-то вместо моей таблицы выведет слово из трех букв? ))))))))))))
    Тогда, вместо того, чтобы рыться в библиотеках РНР в поисках нужной мне функции, я должен, в первую очередь смотреть не на результат ее действия, а на "дыры" в ней?
    Но так ведь далеко не уедешь (((((((( Если даже обычное "эхо" чревато, так что и говорить о других? Я на одном форуме наткнулся на коммент, где юзер кричал, что и include - обалденная "дыра"!
    К чему я все это?
    Вы пишете хорошо, грамотно пишете, но ..
    Возьмите простой пример с echo и include покажите нам, "чайникам", где тут дыра (ну, напишите простенький хакерский код, чтобы понятнее было). Тогда такие как я быстрее врубятся и поймут, в чем опасность.
    А то я уже про Zend стал думать ненароком, может у них безопаснее :)
    И может быть, не я один ...
     
  14. Dead Krolik
    Offline

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

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Ответ: Передача значений переменных компоненту

    Хорошо, будет примерчик. Например, у нас есть код:

    Код (CODE):
    1. $letter=$_GET['letter'];
    2. echo $letter;


    Пишем в адресной строке:

    Код (CODE):
    1. index.php?option=com_gal&task=xxx&letter=<script>alert(document.cookie)</script>


    И в результате все что передано в letter прямиком направляется в тело страницы, то есть пользователю. И у него бац - запускается яваскрипт, который в данном примере просто показывает его кукисы. А может ведь не только их показывать, а еще и злодейства всякие творить от его имени, как то: отправлять формы самостоятельно меняющие пароль или удалять чего-нибудь. От его имени. Он даже заметить, кстати, не успеет.
     
  15. Offline

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

    Регистрация:
    30.09.2007
    Сообщения:
    18
    Симпатии:
    0
    Ответ: Передача значений переменных компоненту

    Dead Krolik, теперь понятно, почему нужно использовать mosGetParam, а не $_GET, спасибо за науку! ))))))))
    Но непонятно другое ...
    Если я передаю значение переменной через ту же глобальную $_GET, а потом у меня эта переменная выводится на странице в виде текста или еще чего - так это у меня и у тех юзеров, которые входят на мой сайт.
    Представим себе "плохого мальчика", который написал такой код у себя в командной строке. Он получит свои "кукисы" или что там еще, но только на своем компе, не так ли?
    Каким образом он перешлет этот свой код ко мне на хост так, что его увидят и все остальные? Нужно же знать пароль, и записать в нужном месте на хосте этот скрипт, ну и все остальное ...
    Простите, что задаю наивные вопросы, но я же не хакер, поэтому механика этого дела мне не совсем ясна.)))))))))))
     
  16. Dead Krolik
    Offline

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

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Ответ: Передача значений переменных компоненту

    Эта механика и называется второй частью XSS. Поверь - главное это уязвимость, а уж показать мы всегда способ найти сумеем. Например рассылаем всем юзерам в пм ссылку на свою крутую страницу, где изображен голый ... эээ ... торс карлсона. И тихонечко на ней делаем iframe 1x1 пиксель, с src=плохая_штука. И в результате все, кто зашли - этот код получили. Но даже и не заметили этого, потому что iframe никто не увидел, все глядели на карлсона.
     

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

Загрузка...