Бобові html modules php name. Jdoc:include - спосіб відображення контенту на сторінці

Chrome - це кінцева обробка HTML-коду модуля перед його вставкою в головний шаблон сайту. Існують кілька зумовлених Chrome-стилів (table, horz, xhtml, rounded, outline), але не завжди те що підходить для вирішення поточних завдань.

Щоб визначити власний стиль відображення у шаблоні, потрібно створити файл "modules.php" у директорії "html". Тобто для шаблону з ім'ям "my_template" файл повинен розташовуватись тут - "templates/my_template/html/modules.php".

У цьому файлі ви повинні визначити функцію під назвою "modChrome_STYLE", де STYLE це ім'я вашого стилю. Ця функція прийматиме три аргументи - $module, &$params та &$attribs як показано нижче:

function modChrome_STYLE ($module, &$params, &$attribs) ( /* обробка та виведення html-коду модуля */ )

У цій функції ви можете використовувати будь-який PHP-код, а також вам будуть доступні всі параметри самого модуля, його властивості та будь-які дані, збережені в базі даних Joomla. В основному бувають потрібні лише наступне

  • $module->content - контент самого модуля, безпосередній HTML-код.
  • $module->title - назва модуля, яка вказана в панелі управління в менеджері модулів.
  • $module->showtitle - прапор, показувати назву чи ні (true чи false).

Функція modChrome_STYLE – це звичайна php-функція, тут можете використовувати абсолютно будь-який php-код. Нижче наведено приклад, якщо у налаштуваннях модуля увімкнено відображення заголовка, то виведеться текст заголовка перед контентом модуля.

function modChrome_STYLE ($module, &$params, &$attribs) ( if ($module->showtitle) ( echo "

" .$module->title ."

"; ) echo $module->content; )

Можна звернутися до будь-яких параметрів модуля. Наприклад, обрамляємо модуль класом

">

Також можна в код позиції додавати свої атрибути, які використовуються в Chrome. Для цього у тег позиції додайте власні атрибути. Імена додаткових атрибутів можна вказувати довільні, всі вони передаватимуться в асоціативний масив $attribs.

Практичний приклад Chrome-функції:

function modChrome_custom($module, $params, $attribs) ( if (isset($attribs["headerLevel"])) ( $headerLevel = $attribs["headerLevel"]; ) else ( $headerLevel = 3; ) if (isset ($attribs["background"])) ( $background = $attribs["background"]; ) else ( $background = "blue"; ) echo "

"; if ($module->showtitle) ( echo " " .$module->title ."";) echo "
"; echo $module->content; echo "
"; echo"
"; }

Практичні приклади використання функції "modChrome_custom"

Одна з найголовніших переваг PHP - те, як він працює з формами HTML. Тут основним є те, що кожен елемент форми автоматично стає доступним вашим програмам на PHP. Для детальної інформації про використання форм у PHP читайте розділ. Ось приклад форми HTML:

Приклад #1 Найпростіша форма HTML

Ваше ім'я:

Ваш вік:

У цій формі немає нічого особливого. Це звичайна форма HTML без спеціальних тегів. Коли користувач заповнить форму та натисне кнопку відправки, буде викликана сторінка action.php . У цьому файлі може бути щось на кшталт:

Приклад #2 Виводимо дані форми

Вітаю, .
Вамроків.

Приклад виведення цієї програми:

Здрастуйте, Сергію. Вам тридцять років.

Якщо не брати до уваги шматки коду з htmlspecialchars()і (int), принцип роботи цього коду має бути простим і зрозумілим. htmlspecialchars()забезпечує правильне кодування "особливих" HTML-символів так, щоб шкідливий HTML або Javascript не було вставлено на вашу сторінку. Поле age, про яке нам відомо, що воно має бути число, ми можемо просто перетворити на integer, що автоматично позбавить нас небажаних символів. PHP також може зробити це автоматично за допомогою розширення filter. Змінні $_POST["name"] і $_POST["age"] автоматично встановлені для вас засобами PHP. Раніше ми використовували суперглобальну змінну $_SERVER , тут ми так само використовуємо суперглобальну змінну $_POST , яка містить всі POST-дані. Зауважимо, що метод відправлення(method) нашої форми – POST. Якби ми використовували метод GET, то інформація нашої форми була б у суперглобальній змінній $_GET. Крім цього, можна використовувати змінну $_REQUEST, якщо джерело даних не має значення. Ця змінна містить суміш GET, POST, COOKIE.

15 років тому

Відповідно до HTTP specification, ви повинні використовувати метод POST, коли ви "за допомогою форми для зміни статей деякого часу на сервері. сторінка тут, у вигляді слід використовувати POST. which is why ці pages aren"t bookmarked або cached.

Ви повинні використовувати GET метод, коли ваша форма є, добре, щоб отримати деякий час від сервера і не фактично змінюється будь-який. Для прикладу, спосіб для пошуку знаряддя повинен використовувати GET, тому що вивчити веб-сайт повинен не змінювати будь-яку думку, що клієнт може скористатися ним, і bookmarking або caching результати search-engine query є just as useful as bookmarkingor static HTML page.

2 years ago

Worth clarifying:

POST is not more secure than GET.

Відповідь для вибору GET vs POST involve різні factory така, як наслідування доцільності (якщо ви "суміщення"? URL), і як можна зробити, щоб зробити функцію, щоб бути shareable -- наприклад, Google Searchs є Get because it makes it easy to copy and share the search query with someone lose simply by sharing the URL.

Здоров'я є лише розглядом, що робить насправді, що в GET є easier до share than a POST. До прикладу: ви не повинні писати слово, щоб бути в GET, тому що користувач збирається використовувати URL і невідповідно розкривати їхнє слово.

Хоча, GET і POST є еквівалентно приємним для інтерпретації, щоб добре розібратися малих людей, якщо ви не розробляєте TLS/SSL для захисту мережі підключення до неї.

Всі форми мають бути HTTP (зазвичай port 80) є додатковим, і сьогодні (2017), там є багато хороших умов для громадських веб-сайтів, щоб не використовувати HTTPS (який є принципово HTTP + Transport Layer Security).

Як bonus, якщо ви використовуєте TLS ви, мінімізуйте ризик ваших користувачів, щоб отримати код (ADs), вмикається в свій транспорт, що не буде йти там.

Елемент em є уривок тексту з підкресленим акцентом. Ви можете використовувати його, щоб звернути увагу читача на зміст речення чи абзацу. Я розповім вам, що це означає після , в якій описаний елемент em .

Таблиця 8-6:Елемент em
Малюнок 8-3:Використання елемента em

У цьому прикладі я поставив акцент на Я (I) на початку речення. Якщо подумати про елемент em , то під час проголошення пропозиції вголос ми розглядаємо питання, що це пропозиція відповіддю питанням. Наприклад, уявіть, що я запитав: «Хто любить яблука та апельсини?» Ваша відповідь буде: «Я люблю яблука та апельсини.» (Коли ви вимовляєте це вголос і ставите акцент на Я, ви даєте зрозуміти, що ви людина, яка любить ці фрукти).

Але якби я запитав: Ви любите яблука і що ще? Ви могли б відповісти: «Я люблю яблука та апельсини (oranges)». У цьому випадку акцент буде зроблено на останнє слово, підкреслюючи, що апельсини є іншим фруктом, який вам подобається. Цей варіант у HTML виглядав би так:

I як apples and oranges .

Визначення іноземних слів та технічних термінів

Елемент i означає частину тексту, яка має іншу природу, ніж навколишній контент. Це досить розпливчасте визначення, але загальні приклади включають слова з інших мов, технічні або наукові терміни і навіть думки людини (на відміну від мови). В описаний елемент i.

Таблиця 8-7:Елемент i
Малюнок 8-5:Використання елемента s

Визначення важливого тексту

Елемент strong означає фрагмент тексту, який має важливе значення. Описано цей елемент.

Таблиця 8-9:Елемент strong
Малюнок 8-7:Використання елемента u

Додавання дрібного шрифту

Елемент small означає дрібний шрифт і часто використовується для застережень та уточнень. У представлений елемент small.

Таблиця 8-11:Елемент small
Малюнок 8-8:Використання елемента small

Додавання верхнього та нижнього індексу

Ви можете використовувати елементи sub і sup для позначення верхнього та нижнього індексу відповідно. Верхні індекси використовуються для написання слів у деяких мовах, а обидва, верхній та нижній індекси використовуються у простих математичних виразах. В представлені ці елементи.

Таблиця 8-12:Елементи sub і sup
Малюнок 8-9:Використання елементів sub і sup

Наявна звичайна вразливість класу PHP-інклудинг. Але людина, для якої я робив аудит, заявила мені, мовляв, цю вразливість експлуатувати неможливо, тому вона не вважається. Довелося з ним посперечатися

Що таке PHP-include

Проведемо маленький лікнеп за цією вразливістю. PHP-include — вразливість, яка дозволяє «підключити» довільний файл, наприклад такий код:

$module=$_REQUEST["module"]; include("modules/".$module);

І тому що у файлі "/etc/pаsswd" зазвичай немає php тегів (), то він виведеться в браузер, як вивівся б html код винесений за php теги в звичайному php скрипті. Звичайно читання файлів лише одна з можливих реалізацій цієї атаки. Головна ж все-таки це інклудинг необхідних файлів з необхідним php кодом.

Повернемося, наприклад. Ускладнимо його:

$module=$_REQUEST["module"]; include("modules/".$module."/module.class.php");

$module = $_REQUEST ["module"];

include ("modules/" . $module . "/module.class.php" ) ;

Як бачите тепер в кінці до нашої змінної додається рядок, який нам заважає приєднати будь-який файл. Так ось, багато функцій php не є бінарно безпечними, тобто такі функції вважають NULL-байт за кінець рядка. Звертаємось до скрипту так:

script.php?module=../../../../../../../../../../../etc/pаsswd%00

І якщо директива magic_quotes вимкнена, то ми знову побачимо вміст /etc/pаsswd

Чи є вразливість?

Повернемося до нашого коду:

$module=addslashes($_REQUEST["module"]); include("modules/".$module."/module.class.php");

$module = addslashes ($_REQUEST [ "module" ] ) ;

include ("modules/" . $module . "/module.class.php" ) ;

Як видно, наша змінна примусово проходить через addslashes і якщо ми спробуємо використовувати NULL-байт то він буде перетворений на \0 і інклуда не вийде.

Але прогрес не стоїть на місці! Виявляється деякі хлопці з USH знайшли в PHP цікаву фічу PHP filesystem attack vectors (англ.). Якщо в коротко переказати суть статті, то php обробляє шляхи з використанням декількох особливостей:

  • Усічення шляху- php обрізає рядок шляху до заданої довжини MAXPATHLEN (У Windows до 270 символів, у NIX - зазвичай 4096, у BSD - зазвичай 1024)
  • Нормалізація шляху- php обробляє шлях спеціальним чином, видаляючи зайві символи "/" та "/." та їх різні комбінації
  • Приведення до канонічного вигляду- забираються зайві переходи, наприклад «dir1/dir2/../dir3» наводиться до «dir1/dir3/» при цьому існування директорії «dir2» не перевіряється, та інші схожі перетворення (тобто продовження нормалізації)

Тепер по порядку, що відбувається з переданим шляхом:

  1. Якщо шлях переданий відносний, то до нього спочатку підставляються значення директиви include_path
  2. Далі шлях обрізається до певної довжини залежно від платформи
  3. Проводиться нормалізація колії
  4. Шлях наводиться до канонічного вигляду

Тепер спробуємо скористатися цим. Спробуємо додати якийсь файл «test.php» який знаходиться в директорії «modules/». Для цього додаємо в кінець симоли "/." таким чином, щоб загальна довжина, разом з ім'ям файлу, значенням з include_path була свідомо більше 4096 символів.
script.php?module=test.php/././.[...]/././.

При цьому необхідно підгадати так, щоб весь рядок шляху (вже обрізаний) закінчувався на точку (важливо!), а не на сліш. Для цього можна додати один ось так:

І один із цих варіантів спрацює точно.

Аналізуємо

Дивимося по порядку які перетворення відбудуться шляхом
modules/test.php//././.[...]/./././module.class.php
4200 символів

Перше, що відбувається з рядком, це до неї додається значення з include_path:
/home/site/public_html/modules/test.php//././.[...]/./././module.class.php
4223 символи

Потім рядок повертається до MAXPATHLEN (допустимо 4096):
/home/site/public_html/modules/test.php//././.[...]/./.
4096 символів

Тут видно навіщо потрібно було додавати ще один слєш (інакше б рядок обрізався до слєша). Тепер проводиться нормалізація цього рядка, спочатку забираються зайві сліші:
/home/site/public_html/modules/test.php/././.[...]/./.
4095 символів

У результаті отримуємо правильний шлях до потрібного нам файлу, і цей шлях вже передасться в іклуд, і додасться потрібний нам файл.

Тобто ось так ми додамо наш файл «test.php» успішно.
script.php?module=test.php//././.[...]/././.

А отже, вразливість є і не теоретична. У результаті мій клієнт заперечив, а я виграв суперечку і 10 рублів на які ми посперечалися. Звичайно, крім 10 рублів я виграв ще й довіру та пошану в очах клієнта, що теж не мало важливо.

нотатки

Тут я розгляну кілька цікавих особливостей експлуатації цієї вразливості.

Вихід із директорії

Розглянемо такий код:

) ;

Опустимо той момент, що можна використовувати RFI і приєднати файл з віддаленого сервера. Допустимо на сервері "allow_url_include=OFF".

Розглянемо ситуацію коли нам треба додати файл з директорії нижче:
script.php?module=../test.php/././.[...]/././.

Таке звернення видасть помилку, типу файл не знайдено. І для того, щоб це обійти, нам треба звернутися ось так:
script.php?module=blabla/../../test.php/././.[...]/././.

Я не дарма описував про канонізацію шляхів. Завдяки їй директорія «blabla» не обов'язково має існувати.

Додавання просто слішів

Уважний читач напевно зауважив, що в описі нормалізації я написав, що мовляв, забираються зайві сліші «/» і крапки зі слішами «/.», то чому б не використовувати просто сліши, щоб уникнути зайвого гемору з потраплянням крапки в кінець.

Вся справа в алгоритмах, тобто зліш з точкою «/.» забирається повністю. А ось з просто слєшами справа трохи складніше, при нормалізації кожні два слєша замінюються на один до тих пір поки не залишиться один (!) слєш, приклад:

/home/site/public_html/modules/test.php////////////////////
57 символів

/home/site/public_html/modules/test.php//////////
48 символів

/home/site/public_html/modules/test.php/////
44 символів

/home/site/public_html/modules/test.php///
42 символів

/home/site/public_html/modules/test.php//
41 символів

/home/site/public_html/modules/test.php/
40 символів

Невеликий відступ:

Причому якщо звернути увагу на багато популярних хак ресурсів, то можна помітити цю помилку. Я так розумію цю помилку почалася зі статті якогось Raz0r де він запропонував вектор:
index.php?act=../../../../../etc/pаsswd/////[…]/////

І зверніть увагу навіть журнал] [акер повторив цю помилку у своїй статті. При цьому навіть в оригінальній статті USH було чітко написано, що використовувати просто сліші не бажано, і необхідно, щоб наприкінці перед нормалізацією залишився символ точки. А просто сліши (навіть без точки на кінці) працюють тільки в PHP з Suhosin.

Тобто використовувати сліш із точкою «/.» — більш універсальний метод, оскільки, на відміну слешей «/», він працює всім версій php.

Висновок

Сподіваюся ця стаття допоможе вам зрозуміти, що у своїх скриптах не можна залишати навіть найменші вразливості, оскільки рано чи пізно можна розробити свій вектор атаки, що може призвести до серйозних наслідків.



Подібні публікації