Бобові html modules php name. Додавання акценту. Приклад #2 Виводимо дані форми

Ми поверхово торкнулися теми методів виведення контенту в шаблоні. Давайте тепер докладно розберемо, що це і з чим його їдять. Отже, оголошення методу jdoc присутні у кожному шаблоні Joomla і виводять у тіло шаблону (тобто на сторінку сайту) ту чи іншу інформацію. Загалом оголошення методу виглядає так

Цей рядок виводить на сайті інформацію з компонентів, наприклад статті з com_content. Тип елементів виводу вказується в атрибуті.

1. type – типи елементів виведення.

  • component- як писав вище, виводить основний зміст сторінки. Може викликатись лише один раз у шаблоні.
  • head- оголошується так само один раз після тега, що відкриває . Служить для виведення стилів, скриптів, та метаданих поточної сторінки.</li><li><i>message</i><i>- </i>виводить системні повідомлення. Оголошується один раз на тілі документа (body).</li><li><i>installation</i>- нічого не виводить і є «інструкцією» для установки.</li><li><i>module -</i>виводить на сторінці одиничний модуль. Кількість оголошень не обмежена.</li><li><i>modules</i>- На відміну від попереднього типу, дозволяє виводити у своїй позиції не одиничне число модулів.</li> </ul><p>Для перших чотирьох зазначених типів достатньо лише вказати їх на сторінці. Що стосується типу модуля завдання трохи ускладнюється. Для того, щоб вивести на сторінку модуль, нам потрібно спочатку створити для нього <b>модульну позицію</b>з унікальним ідентифікатором (назва позиції модуля). Це робиться за допомогою атрибуту name=«ім'я позиції» та обов'язковим додаванням рядка:</p><p> <position>назва позиції</position>у файл templateDetails.xml. Описуючи назву позиції в templateDetails.xml, ми позначаємо її в системі і бачимо в менеджері модулів. Імена позицій можуть бути довільними, хоча name=«user3» позиція за замовчуванням використовується для відображення верхнього меню.</p><p><b>2. style - Опис стилю виведення (mod chrome).</b></p> <p>Від зазначеного стилю залежить зовнішній вигляд та структура оболонки модуля. Виглядає як</p><p> :<jdoc:include type="modules" name="user1" style="xhtml" />За замовчуванням закладено кілька стилів виведення модулів:</p><ul><li><i>xhtml -</i>виводить модуль у блоці із заголовком function modChrome_xhtml($module, &$params, &$attribs) <br>{<br>if (!empty ($module->content)) : ?> <br> <div class="moduletable<?php echo htmlspecialchars($params->get("moduleclass_sfx")); ?>"> <br> <?php if ($module->showtitle != 0) : ?> <br> <h3><?php echo $module->title; ?></h3><br> <?php endif; ?><br> <?php echo $module->content; ?> <br> </div><br> <?php endif;<br>}</li><li><i>table -</i>виводить модуль у верстці табличної структури <br>function modChrome_table($module, &$params, &$attribs) <br>{ ?><br> <table cellpadding="0" cellspacing="0" class="moduletable<?php echo htmlspecialchars($params->get("moduleclass_sfx")); ?>"> <br> <?php if ($module->showtitle != 0) : ?> <br> <tr><br> <th><br> <?php echo $module->title; ?> <br> </th><br> </tr><br> <?php endif; ?><br> <tr><br> <td><br> <?php echo $module->content; ?> <br> </td><br> </tr><br> </table><br> <?php<br>}</li><li><i>horz -</i>виводить вміст модуля в комірці таблиці, горизонтально function modChrome_horz($module, &$params, &$attribs) <br>{ ?><br> <table cellspacing="1" cellpadding="0" width="100%"><br> <tr><br> <td><br> <?php modChrome_table($module, $params, $attribs); ?><br> </td><br> </tr><br> </table><br> <?php<br>}</li><li><i>rounded</i>- виводить модуль у кількох вкладених блоках для складного стильового оформлення у вигляді графічних меж (напр. закруглених кутів) function modChrome_rounded($module, &$params, &$attribs) <br>{ ?><br> <div class="module<?php echo htmlspecialchars($params->get("moduleclass_sfx")); ?>"> <br> <div><br> <div><br> <div><br> <?php if ($module->showtitle != 0) : ?> <br> <h3><?php echo $module->title; ?></h3><br> <?php endif; ?><br> <?php echo $module->content; ?> <br> </div><br> </div><br> </div><br> </div><br> <?php<br>}</li><li><i>outline</i>- додає до блоку модуля встановлені стилі css function modChrome_outline($module, &$params, &$attribs) <br>{<br>static $css=false; <br>if (!$css) <br> {<br>$css=true; <br>jimport("joomla.environment.browser"); <br>$doc = JFactory::getDocument(); <br>$browser = JBrowser::getInstance(); <br>$doc->addStyleDeclaration(".mod-preview-info ( padding: 2px 4px 2px 4px; border: 1px solid black; position: absolute; background-color: white; color: red;)"); <br>$doc->addStyleDeclaration(".mod-preview-wrapper ( background-color:#eee; border: 1px dotted black; color:#700;)"); <br>if ($browser->getBrowser()=="msie") <br> {<br>if ($browser->getMajor()<= 7) {<br>$doc->addStyleDeclaration(".mod-preview-info (filter: alpha(opacity=80);)"); <br>$doc->addStyleDeclaration(".mod-preview-wrapper (filter: alpha(opacity=50);)"); <br> } <br>else ( <br>$doc->addStyleDeclaration(".mod-preview-info (-ms-filter: alpha(opacity=80);)"); <br>$doc->addStyleDeclaration(".mod-preview-wrapper (-ms-filter: alpha(opacity=50);)"); <br> } <br> } <br>else <br> {<br>$doc->addStyleDeclaration(".mod-preview-info (opacity: 0.8;)"); <br>$doc->addStyleDeclaration(".mod-preview-wrapper (opacity: 0.5;)"); <br> } <br> } <br> ?><br> <div class="mod-preview"><br> <div class="mod-preview-info"><?php echo $module->position."[".$module->style."]"; ?></div><br> <div class="mod-preview-wrapper"><br> <?php echo $module->content; ?> <br> </div><br> </div><br> <?php<br>}</li><li><i>none</i>- аналогічно не зазначеному взагалі style. Виводить модуль без оформлення та заголовка function modChrome_none($module, &$params, &$attribs) <br>{<br>echo $module->content; <br>}</li> </ul><p>Усі встановлені стилі розташовуються у файлі templates/system/html/modules.php. Але ми не обмежені використанням лише наданих варіантів, а цілком можемо створювати власні.</p> <p><b>3. Створення користувача mode chrome.</b></p> <p><b><br></b>Отже, надані за умовчанням типи уявлення модулів не задовольняють поточні вимоги. Потрібно додати свій стиль оформлення. Як приклад виберемо ситуацію, що досить часто повторюється. За завданням потрібно замість <h3>помістити заголовок модуля в тег <span>який є семантично нейтральним. Також потрібно помістити контентблок модуля в окремий <div>. Для створення власного стилю виведення модуля скористаємося стандартними засобами. У більшості шаблонів Joomla існує папка html/ (templates/ім'я шаблону/html/), що використовується для так званої шаблонізації. Тобто, якщо скопіювати в цю папку шаблон модуля, замість шаблону з директорії modules/my_module/tmpl/default буде виводитися файл з templates/ім'я шаблону/html/my_modules/default. Аналогічно шаблонізуються та компоненти. Зручно та практично. У папці html/ Вашого шаблону створимо файл modules.php. Якщо такої папки в шаблоні немає, створимо її. У файл запишемо</p><p> <?php<br>function modChrome_modbox($module, &$params, &$attribs) // Викликаємо функцію <br>{<br>if (!empty ($module->content)) : /* Перевіряємо наявність у позиції включеного модуля */?> <br> <div class="moduletable<?php echo htmlspecialchars($params->get("moduleclass_sfx")); /* виводимо суфікс css класу модуля */ ?>"> <br> <?php if ($module->showtitle != 0) : /* перевіряємо чи заголовок модуля */ ?> <br> <span class="title"><?php echo $module->title; /* Виводимо заголовок */ ?></span><br> <?php endif; ?><br> <div class="modcontent"><br> <?php echo $module->content; /* Виводимо вміст модуля */ ?> <br> </div><br> </div><br> <?php endif;<br>} <br>?> Готово. Тепер потрібно лише вказати його як стиль виведення. <jdoc:include type="modules" name="user1" style="modbox"/>Призначаємо до нашої позиції модуль і дивимося результат.</p> <p>Chrome - це кінцева обробка HTML-коду модуля перед його вставкою в головний шаблон сайту. Існують кілька зумовлених Chrome-стилів (table, horz, xhtml, rounded, outline), але не завжди те що підходить для вирішення поточних завдань.</p> <p>Щоб визначити власний стиль відображення у шаблоні, потрібно створити файл "modules.php" у директорії "html". Тобто для шаблону з ім'ям "my_template" файл повинен розташовуватись тут - "templates/my_template/html/modules.php".</p> <p>У цьому файлі ви повинні визначити функцію під назвою "modChrome_STYLE", де STYLE це ім'я вашого стилю. Ця функція прийматиме три аргументи - $module, &$params та &$attribs як показано нижче:</p> <p>function modChrome_STYLE ($module, &$params, &$attribs) ( /* обробка та виведення html-коду модуля */ )</p> <p>У цій функції ви можете використовувати будь-який PHP-код, а також вам будуть доступні всі параметри самого модуля, його властивості та будь-які дані, збережені в базі даних Joomla. В основному бувають потрібні лише наступне</p> <ul><li>$module->content - контент самого модуля, безпосередній HTML-код.</li> <li>$module->title - назва модуля, яка вказана в панелі управління в менеджері модулів.</li> <li>$module->showtitle - прапор, показувати назву чи ні (true чи false).</li> </ul><p>Функція modChrome_STYLE – це звичайна php-функція, тут можете використовувати абсолютно будь-який php-код. Нижче наведено приклад, якщо в налаштуваннях модуля увімкнено відображення заголовка, то виведеться текст заголовка перед контентом модуля.</p> <p>function modChrome_STYLE ($module, &$params, &$attribs) ( if ($module->showtitle) ( echo " <h2>" .$module->title ."</h2>"; ) echo $module->content; )</p> <p>Можна звернутися до будь-яких параметрів модуля. Наприклад, обрамляємо модуль класом</p> <p><div class="<?php echo $params->get("moduleclass_sfx"); ?>"><!-- div contents --> </div></p> <p>Також можна в код позиції додавати свої атрибути, які використовуються в Chrome. Для цього у тег позиції <jdoc:include />додайте власні атрибути. Імена додаткових атрибутів можна вказувати довільні, всі вони передаватимуться в асоціативний масив $attribs.</p> <h4>Практичний приклад Chrome-функції:</h4> <p>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 " <div >"; if ($module->showtitle) ( echo " <h" .$headerLevel .">" .$module->title ."</h" .$headerLevel .">";) echo " <div class=".$background.">"; echo $module->content; echo "</div>"; echo"</div>"; }</p> <h4>Практичні приклади використання функції "modChrome_custom"</h4> <p><!-- вызов в шаблоне --> <jdoc:include type="modules" name="user1" style="custom" /> <!-- HTML-код на выходе --> <div> <h3><!-- Module title --></h3> <div class="blue"> <!-- Module content --> </div> </div></p> <p><!-- вызов в шаблоне --> <jdoc:include type="modules" name="user1" style="custom" background="green" /> <!-- HTML-код на выходе --> <div> <h3><!-- Module title --></h3> <div class="green"> <!-- Module content --> </div> </div></p> <p><!-- вызов в шаблоне --> <jdoc:include type="modules" name="user1" style="custom" headerLevel="1" background="yellow" /> <!-- HTML-код на выходе --> <div> <h1><!-- Module title --></h1> <div class="yellow"> <!-- Module content --> </div> </div></p> <p>Елемент em є уривок тексту з підкресленим акцентом. Ви можете використовувати його, щоб звернути увагу читача на зміст речення чи абзацу. Я розповім вам, що це означає після , в якій описаний елемент em .</p><blockquote><b>Таблиця 8-6:</b>Елемент em</blockquote><blockquote><b>Малюнок 8-3:</b>Використання елемента em</blockquote><p>У цьому прикладі я поставив акцент на Я (I) на початку речення. Якщо подумати про елемент em , то при проголошенні пропозиції вголос ми розглядаємо питання, що це пропозиція відповіддю питанням. Наприклад, уявіть, що я запитав: «Хто любить яблука та апельсини?» Ваша відповідь буде: «Я люблю яблука та апельсини.» (Коли ви вимовляєте це вголос і ставите акцент на Я, ви даєте зрозуміти, що ви людина, яка любить ці фрукти).</p><p>Але якби я запитав: Ви любите яблука і що ще? Ви могли б відповісти: «Я люблю яблука та апельсини (oranges)». У цьому випадку акцент буде зроблено на останнє слово, підкреслюючи, що апельсини є іншим фруктом, який вам подобається. Цей варіант у HTML виглядав би так:</p><p>I як apples and <b><em> </b> oranges <b></em> </b>.</p><h3>Визначення іноземних слів та технічних термінів</h3><p>Елемент i означає частину тексту, яка має іншу природу, ніж навколишній контент. Це досить розпливчасте визначення, але загальні приклади включають слова з інших мов, технічні або наукові терміни і навіть думки людини (на відміну від мови). В описаний елемент i.</p><blockquote><b>Таблиця 8-7:</b>Елемент i</blockquote><blockquote><b>Малюнок 8-5:</b>Використання елемента s</blockquote><br><img src='https://i0.wp.com/storage.smarly.net/html5/8.5.png' width="100%" loading=lazy loading=lazy><h3>Визначення важливого тексту</h3><p>Елемент strong означає фрагмент тексту, який має важливе значення. Описано цей елемент.</p><blockquote><b>Таблиця 8-9:</b>Елемент strong</blockquote><blockquote><b>Малюнок 8-7:</b>Використання елемента u</blockquote><br><img src='https://i0.wp.com/storage.smarly.net/html5/8.7.png' width="100%" loading=lazy loading=lazy><h3>Додавання дрібного шрифту</h3><p>Елемент small означає дрібний шрифт і часто використовується для застережень та уточнень. У представлений елемент small.</p><blockquote><b>Таблиця 8-11:</b>Елемент small</blockquote><blockquote><b>Малюнок 8-8:</b>Використання елемента small</blockquote><br><img src='https://i0.wp.com/storage.smarly.net/html5/8.8.png' width="100%" loading=lazy loading=lazy><h3>Додавання верхнього та нижнього індексу</h3><p>Ви можете використовувати елементи sub і sup для позначення верхнього та нижнього індексу відповідно. Верхні індекси використовуються для написання слів у деяких мовах, а обидва, верхній та нижній індекси використовуються у простих математичних виразах. В представлені ці елементи.</p><blockquote><b>Таблиця 8-12:</b>Елементи sub і sup</blockquote><blockquote><b>Малюнок 8-9:</b>Використання елементів sub і sup</blockquote><br><img src='https://i0.wp.com/storage.smarly.net/html5/8.9.png' width="100%" loading=lazy loading=lazy> <p>В наявності звичайна вразливість класу PHP-іклудинг. Але людина, для якої я робив аудит, заявила мені, мовляв, цю вразливість експлуатувати неможливо, тому вона не вважається. Довелося з ним посперечатися</p> <h2>Що таке PHP-include</h2> <p>Проведемо маленький лікнеп за цією вразливістю. PHP-include — вразливість, яка дозволяє «підключити» довільний файл, наприклад такий код:</p> <p>$module=$_REQUEST["module"]; include("modules/".$module);</p> <p>І тому що у файлі "/etc/pаsswd" зазвичай немає php тегів (<?php и?>), то він виведеться в браузер, як вивівся б html код винесений за php теги в звичайному php скрипті. Звичайно читання файлів лише одна з можливих реалізацій цієї атаки. Головна ж все-таки це інклудинг необхідних файлів з необхідним php кодом.</p> <p>Повернемося, наприклад. Ускладнимо його:</p> <p>$module=$_REQUEST["module"]; include("modules/".$module."/module.class.php");</p> <table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"> </td> <td class="crayon-code"><p>$module = $_REQUEST ["module"];</p><p>include ("modules/" . $module . "/module.class.php" ) ;</p> </td> </tr></table><p>Як бачите тепер в кінці до нашої змінної додається рядок, який нам заважає приєднати будь-який файл. Так ось, багато функцій php не є бінарно безпечними, тобто такі функції вважають NULL-байт за кінець рядка. Звертаємось до скрипту так:</p> <p>script.php?module=../../../../../../../../../../../etc/pаsswd%00</p> <p>І якщо директива magic_quotes вимкнена, то ми знову побачимо вміст /etc/pаsswd</p> <h2>Чи є вразливість?</h2> <p>Повернемося до нашого коду:</p> <p>$module=addslashes($_REQUEST["module"]); include("modules/".$module."/module.class.php");</p> <table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"> </td> <td class="crayon-code"><p>$module = addslashes ($_REQUEST [ "module" ] ) ;</p><p>include ("modules/" . $module . "/module.class.php" ) ;</p> </td> </tr></table><p>Як видно, наша змінна примусово проходить через addslashes і якщо ми спробуємо використовувати NULL-байт то він буде перетворений на \0 і інклуда не вийде.</p> <p>Але прогрес не стоїть на місці! Виявляється деякі хлопці з USH знайшли в PHP цікаву фічу PHP filesystem attack vectors (англ.). Якщо в коротко переказати суть статті, то php обробляє шляхи з використанням декількох особливостей:</p> <ul><li><b>Усічення шляху</b>- php обрізає рядок шляху до заданої довжини MAXPATHLEN (У Windows до 270 символів, у NIX - зазвичай 4096, у BSD - зазвичай 1024)</li> <li><b>Нормалізація шляху</b>- php обробляє шлях спеціальним чином, видаляючи зайві символи "/" та "/." та їх різні комбінації</li> <li><b>Приведення до канонічного вигляду</b>- забираються зайві переходи, наприклад «dir1/dir2/../dir3» наводиться до «dir1/dir3/» при цьому існування директорії «dir2» не перевіряється, та інші схожі перетворення (тобто продовження нормалізації)</li> </ul><p>Тепер по порядку, що відбувається з переданим шляхом:</p> <ol><li>Якщо шлях переданий відносний, то спочатку спочатку підставляються значення з директиви include_path</li> <li>Далі шлях обрізається до певної довжини залежно від платформи</li> <li>Проводиться нормалізація колії</li> <li>Шлях наводиться до канонічного вигляду</li> </ol><p>Тепер спробуємо скористатися цим. Спробуємо додати якийсь файл «test.php» який знаходиться в директорії «modules/». Для цього додаємо в кінець симоли "/." таким чином, щоб загальна довжина, разом з ім'ям файлу, значенням з include_path була свідомо більше 4096 символів. <br>script.php?module=test.php/././.[...]/././.</p> <p>При цьому необхідно підгадати так, щоб весь рядок шляху (вже обрізаний) закінчувався на точку (важливо!), а не на сліш. Для цього можна додати один ось так: <br></p> <p>І один із цих варіантів спрацює точно.</p> <h2>Аналізуємо</h2> <p>Дивимося по порядку які перетворення відбудуться шляхом <br>modules/test.php//././.[...]/./././module.class.php <br><i>4200 символів</i> </p> <p>Перше, що відбувається з рядком, це до неї додається значення з include_path: <br>/home/site/public_html/modules/test.php//././.[...]/./././module.class.php <br><i>4223 символи</i> </p> <p>Потім рядок повертається до MAXPATHLEN (допустимо 4096): <br>/home/site/public_html/modules/test.php//././.[...]/./. <br><i>4096 символів</i> </p> <p>Тут видно навіщо потрібно було додавати ще один слєш (інакше б рядок обрізався до слєша). Тепер проводиться нормалізація цього рядка, спочатку забираються зайві сліші: <br>/home/site/public_html/modules/test.php/././.[...]/./. <br><i>4095 символів</i> </p> <p>У результаті отримуємо правильний шлях до потрібного нам файлу, і цей шлях вже передасться в іклуд, і додасться потрібний нам файл.</p> <p>Тобто ось так ми додамо наш файл «test.php» успішно. <br>script.php?module=test.php//././.[...]/././.</p> <p>А отже, вразливість є і не теоретична. У результаті мій клієнт заперечив, а я виграв суперечку і 10 рублів на які ми посперечалися. Звичайно, крім 10 рублів я виграв ще й довіру та пошану в очах клієнта, що теж не мало важливо.</p> <h2>нотатки</h2> <p>Тут я розгляну кілька цікавих особливостей експлуатації цієї вразливості.</p> <h3>Вихід із директорії</h3> <p>Розглянемо такий код:</p> <p> ) ; </p> <p>Опустимо той момент, що можна використовувати RFI і приєднати файл з віддаленого сервера. Допустимо на сервері "allow_url_include=OFF".</p> <p>Розглянемо ситуацію коли нам треба додати файл з директорії нижче: <br>script.php?module=../test.php/././.[...]/././.</p> <p>Таке звернення видасть помилку, типу файл не знайдено. І для того, щоб це обійти, нам треба звернутися ось так: <br>script.php?module=blabla/../../test.php/././.[...]/././.</p> <p>Я не дарма описував про канонізацію шляхів. Завдяки їй директорія «blabla» не обов'язково має існувати.</p> <h3>Додавання просто слішів</h3> <p>Уважний читач напевно зауважив, що в описі нормалізації я написав, що мовляв, забираються зайві сліші «/» і крапки зі слішами «/.», то чому б не використовувати просто сліши, щоб уникнути зайвого гемору з потраплянням крапки в кінець.</p> <p>Вся справа в алгоритмах, тобто зліш з точкою «/.» забирається повністю. А ось з просто слєшами справа трохи складніше, при нормалізації кожні два слєша замінюються на один до тих пір поки не залишиться один (!) слєш, приклад:</p><p>/home/site/public_html/modules/test.php//////////////////// <br><i>57 символів</i> <br> ↓<br>/home/site/public_html/modules/test.php////////// <br><i>48 символів</i> <br> ↓<br>/home/site/public_html/modules/test.php///// <br><i>44 символів</i> <br> ↓<br>/home/site/public_html/modules/test.php/// <br><i>42 символів</i> <br> ↓<br>/home/site/public_html/modules/test.php// <br><i>41 символів</i> <br> ↓<br>/home/site/public_html/modules/test.php/ <br><i>40 символів</i> </p> <h3><b>Невеликий відступ:</b></h3> <p>Причому якщо звернути увагу на багато популярних хак ресурсів, то можна помітити цю помилку. Я так розумію цю помилку почалася зі статті якогось Raz0r де він запропонував вектор: <br>index.php?act=../../../../../etc/pаsswd/////[…]/////</p> <p>І зверніть увагу навіть журнал] [акер повторив цю помилку у своїй статті. При цьому навіть в оригінальній статті USH було чітко написано, що використовувати просто сліші не бажано, і необхідно, щоб наприкінці перед нормалізацією залишився символ точки. А просто сліши (навіть без точки на кінці) працюють тільки в PHP з Suhosin.</p> <p>Тобто використовувати сліш із точкою «/.» — більш універсальний метод, оскільки, на відміну слешей «/», він працює всім версій php.</p> <h2>Висновок</h2> <p>Сподіваюся ця стаття допоможе вам зрозуміти, що у своїх скриптах не можна залишати навіть найменші вразливості, оскільки рано чи пізно можна розробити свій вектор атаки, що може призвести до серйозних наслідків.</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> <div class='yarpp-related'><div class="yarpp-related-title">Схожі статті</div><div class="yarpp-thumbnails-horizontal"> <a class='yarpp-thumbnail' href='/flash-drives/chto-takoe-laik-na-avu-kak-nakrutit-podpischikov-v-vk-ne/' title='Як накрутити передплатників у вк не тільки безкоштовно, але й без завдань'> <img width="120" height="120" src="/uploads/50ba4f687d627f58c8316ebad1cb05f2.jpg" class="attachment-yarpp-thumbnail size-yarpp-thumbnail wp-post-image" alt="Як накрутити передплатників у вк не тільки безкоштовно, але й без завдань" / loading=lazy loading=lazy><span class="yarpp-thumbnail-title">Як накрутити передплатників у вк не тільки безкоштовно, але й без завдань</span></a> <a class='yarpp-thumbnail' href='/apple/kak-bystro-nakrutit-druzei-v-kontakte-kak-nakrutit-mnogo/' title='Як накрутити багато друзів (передплатників) вконтакті'> <img width="120" height="120" src="/uploads/21dd31ff6428e81b218424453f73b3d7.jpg" class="attachment-yarpp-thumbnail size-yarpp-thumbnail wp-post-image" alt="Як накрутити багато друзів (передплатників) вконтакті" / loading=lazy loading=lazy><span class="yarpp-thumbnail-title">Як накрутити багато друзів (передплатників) вконтакті</span></a> <a class='yarpp-thumbnail' href='/windows/nakrutka-realov-v-kontakte-kak-nakrutit-podpischikov-v-vk-ne-tolko-besplatno/' title='Як накрутити передплатників у вк не тільки безкоштовно, але й без завдань'> <img width="120" height="120" src="/uploads/3c9543414d8508b3e938a61116ce604c.jpg" class="attachment-yarpp-thumbnail size-yarpp-thumbnail wp-post-image" alt="Як накрутити передплатників у вк не тільки безкоштовно, але й без завдань" / loading=lazy loading=lazy><span class="yarpp-thumbnail-title">Як накрутити передплатників у вк не тільки безкоштовно, але й без завдань</span></a> <a class='yarpp-thumbnail' href='/flash-drives/halyavnye-laiki-vkontakte-kak-nakrutit-podpischikov-v-vk-ne/' title='Як накрутити передплатників у вк не тільки безкоштовно, але й без завдань'> <img width="120" height="120" src="/uploads/dd4744782750369b8cc6b5f9d7913cc6.jpg" class="attachment-yarpp-thumbnail size-yarpp-thumbnail wp-post-image" alt="Як накрутити передплатників у вк не тільки безкоштовно, але й без завдань" / loading=lazy loading=lazy><span class="yarpp-thumbnail-title">Як накрутити передплатників у вк не тільки безкоштовно, але й без завдань</span></a> </div></div> </div> <div class="sidebar"> <div class="categories-menu"> <ul> <li> <div class="title"> <div class="icon">   </div> <div class="name"> <a href="/category/windows/" >Windows</a></div> </div> </li> <li> <div class="title"> <div class="icon">   </div> <div class="name"> <a href="/category/browsers/" >Браузери</a></div> </div> </li> <li> <div class="title"> <div class="icon">   </div> <div class="name"> <a href="/category/social-networks/" >Соціальні мережі</a></div> </div> </li> <li> <div class="title"> <div class="icon">   </div> <div class="name"> <a href="/category/android/" >Android</a></div> </div> </li> <li> <div class="title"> <div class="icon">   </div> <div class="name"> <a href="/category/apple/" >Apple</a></div> </div> </li> <li> <div class="title"> <div class="icon">   </div> <div class="name"> <a href="/category/hard-disk/" >Жорсткий диск</a></div> </div> </li> <li> <div class="title"> <div class="icon">   </div> <div class="name"> <a href="/category/flash-drives/" >Флеш-накопичувачі</a></div> </div> </li> <li> <div class="title"> <div class="icon">   </div> <div class="name"> <a href="/category/miscellaneous/" >Різне</a></div> </div> </li> </ul> </div> <div class="sidebar-ad2" style="text-align:center;"> </div> </div> </div><a href="#" class="back-to-top"><i class="back-to-top-icon"></i></a> <div id="footer"> <div class="wrap"> <div class="copyright"> <p>© 2023 hddrecover.ru.</p> <p>Професійне відновлення даних</p> </div> <div class="menu"> <ul> <li><a href="" >Про сайт</a></li> <li><a href="/feedback/" >Контакти</a></li> </ul> </div> </div> </div> <link rel='stylesheet' id='fvm-footer-0-css' href='//hddrecover.ru/wp-content/uploads/fvm/cache/footer-b7b91b94-1515032323.min.css' type='text/css' media='all' /> <script type="text/javascript" src="//hddrecover.ru/wp-content/uploads/fvm/cache/footer-e76513d9-1515032323.min.js" defer></script> </body></html>