→ Бобовые html modules php name. Jdoc:include - метод отображения контента на странице. Практические примеры использования функции "modChrome_custom"

Бобовые html modules php name. Jdoc:include - метод отображения контента на странице. Практические примеры использования функции "modChrome_custom"

Мы поверхностно коснулись темы методов вывода контента в теле шаблона. Давайте теперь подробно разберем что это и с чем его едят. Итак, объявления метода 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>Одно из главнейших достоинств PHP - то, как он работает с формами HTML. Здесь основным является то, что каждый элемент формы автоматически становится доступным вашим программам на PHP. Для подробной информации об использовании форм в PHP читайте раздел . Вот пример формы HTML:</p> <p><b>Пример #1 Простейшая форма HTML </b></p> <p><form action="action.php" method="post"> <p>Ваше имя: <input type="text" name="name" /></p> <p>Ваш возраст: <input type="text" name="age" /></p> <p><input type="submit" /></p> </form></p> <p>В этой форме нет ничего особенного. Это обычная форма HTML без каких-либо специальных тегов. Когда пользователь заполнит форму и нажмет кнопку отправки, будет вызвана страница action.php . В этом файле может быть что-то вроде:</p> <p><b>Пример #2 Выводим данные формы </b></p> <p>Здравствуйте, <?php echo htmlspecialchars ($_POST [ "name" ]); ?> .<br>Вам <?php echo (int) $_POST [ "age" ]; ?> лет. </p> <p>Пример вывода данной программы:</p> <p>Здравствуйте, Сергей. Вам 30 лет.</p> <p>Если не принимать во внимание куски кода с <span>htmlspecialchars() </span> и <i>(int) </i>, принцип работы данного кода должен быть прост и понятен. <span>htmlspecialchars() </span> обеспечивает правильную кодировку "особых" HTML-символов так, чтобы вредоносный HTML или Javascript не был вставлен на вашу страницу. Поле age, о котором нам известно, что оно должно быть число, мы можем просто преобразовать в <span>integer </span>, что автоматически избавит нас от нежелательных символов. PHP также может сделать это автоматически с помощью расширения filter . Переменные $_POST["name"] и $_POST["age"] автоматически установлены для вас средствами PHP. Ранее мы использовали суперглобальную переменную $_SERVER , здесь же мы точно так же используем суперглобальную переменную $_POST , которая содержит все POST-данные. Заметим, что <i>метод отправки </i> (method) нашей формы - POST. Если бы мы использовали метод <i>GET </i>, то информация нашей формы была бы в суперглобальной переменной $_GET . Кроме этого, можно использовать переменную $_REQUEST , если источник данных не имеет значения. Эта переменная содержит смесь данных GET, POST, COOKIE.</p> <p><b>15 years ago </b></p> <p>According to the HTTP specification, you should use the POST method when you"re using the form to change the state of something on the server end. For example, if a page has a form to allow users to add their own comments, like this page here, the form should use POST. If you click "Reload" or "Refresh" on a page that you reached through a POST, it"s almost always an error -- you shouldn"t be posting the same comment twice -- which is why these pages aren"t bookmarked or cached.</p><p>You should use the GET method when your form is, well, getting something off the server and not actually changing anything. For example, the form for a search engine should use GET, since searching a Web site should not be changing anything that the client might care about, and bookmarking or caching the results of a search-engine query is just as useful as bookmarking or caching a static HTML page. </p> <p><b>2 years ago </b></p> <p>Worth clarifying: </p><p>POST is not more secure than GET. </p><p>The reasons for choosing GET vs POST involve various factors such as intent of the request (are you "submitting" information?), the size of the request (there are limits to how long a URL can be, and GET parameters are sent in the URL), and how easily you want the Action to be shareable -- Example, Google Searches are GET because it makes it easy to copy and share the search query with someone else simply by sharing the URL. </p><p>Security is only a consideration here due to the fact that a GET is easier to share than a POST. Example: you don"t want a password to be sent by GET, because the user might share the resulting URL and inadvertently expose their password.</p><p>However, a GET and a POST are equally easy to intercept by a well-placed malicious person if you don"t deploy TLS/SSL to protect the network connection itself. </p><p>All Forms sent over HTTP (usually port 80) are insecure, and today (2017), there aren"t many good reasons for a public website to not be using HTTPS (which is basically HTTP + Transport Layer Security). </p><p>As a bonus, if you use TLS you minimise the risk of your users getting code (ADs) injected into your traffic that wasn"t put there by you. </p> <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 c 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>");</script> <noindex> </noindex> <p><b> </b></p> <p><a name="p7"></a></p> <div style="text-align: center;"></div> <noindex> <p style="text-align: center;"> <p> </p> <div id="venus-104357"></div> </p> </noindex> <a href="#" id="toTop"></a> <div id="toTop2"> <div > <center> </div> </center> </div> <span class="full-tags pull-left"></span> </div> <div class="full-comment" > <div id="yandex_rtb_R-A-233979-2"></div> </div> <div class="full-news-panel"> Это интересно: </div> <ul class="related-block "> <li class="related-block_item col-sm-3 col-xs-6"> <a href="/huawei-mediapad-x1---tehnicheskie-harakteristiki-huawei-mediapad-x1---tehnicheskie.html" title="Huawei MediaPad X1 - Технические характеристики Информация о типе громкоговорителей и поддерживаемых устройством аудиотехнологиях"> <img class="related-block_item__img" src="/uploads/a850e9d6a39df2e7b5a483405a5460e5.jpg" alt="Huawei MediaPad X1 - Технические характеристики Информация о типе громкоговорителей и поддерживаемых устройством аудиотехнологиях" / loading=lazy> <div class="related-block_item__title">Huawei MediaPad X1 - Технические характеристики Информация о типе громкоговорителей и поддерживаемых устройством аудиотехнологиях</div> </a> </li> <li class="related-block_item col-sm-3 col-xs-6"> <a href="/ne-vklyuchaetsya-galaxy-s6-edge-ne-vklyuchaetsya-telefon-samsung-samsung-galaksi-a6-ne.html" title="Не включается телефон Samsung Самсунг галакси а6 не включается"> <img class="related-block_item__img" src="/uploads/9c967a96bf0c3756ebae56cc1b6f1185.jpg" alt="Не включается телефон Samsung Самсунг галакси а6 не включается" / loading=lazy> <div class="related-block_item__title">Не включается телефон Samsung Самсунг галакси а6 не включается</div> </a> </li> <li class="related-block_item col-sm-3 col-xs-6"> <a href="/samsung-galaxy-s4-i9500---tehnicheskie-harakteristiki-ne-vidit-kartu-pamyati-samsung.html" title="Не видит карту памяти Samsung Galaxy S4 i9500 Экран мобильного устройства характеризуется своей технологией, разрешением, плотностью пикселей, длиной диагонали, глубиной цвета и др"> <img class="related-block_item__img" src="/uploads/cf6e61a07de8e8bdb9f8bc91bca1cae4.jpg" alt="Не видит карту памяти Samsung Galaxy S4 i9500 Экран мобильного устройства характеризуется своей технологией, разрешением, плотностью пикселей, длиной диагонали, глубиной цвета и др" / loading=lazy> <div class="related-block_item__title">Не видит карту памяти Samsung Galaxy S4 i9500 Экран мобильного устройства характеризуется своей технологией, разрешением, плотностью пикселей, длиной диагонали, глубиной цвета и др</div> </a> </li> <li class="related-block_item col-sm-3 col-xs-6"> <a href="/kak-steret-prilozheniya-s-telefona-kak-udalyat-prilozheniya-na.html" title="Как удалять приложения на Андроиде, стандартные и установленные пользователем — несколько способов"> <img class="related-block_item__img" src="/uploads/13a4ec73deea567207abe9d73c0fe4bf.jpg" alt="Как удалять приложения на Андроиде, стандартные и установленные пользователем — несколько способов" / loading=lazy> <div class="related-block_item__title">Как удалять приложения на Андроиде, стандартные и установленные пользователем — несколько способов</div> </a> </li> <li class="related-block_item col-sm-3 col-xs-6"> <a href="/obnovlenie-proshivki-meizu-pro-6-universalnaya-instrukciya-po-obnovleniyu.html" title="Универсальная инструкция по обновлению прошивки на Meizu"> <img class="related-block_item__img" src="/uploads/80ca6087b88195f5fa2a80f27adae2b6.jpg" alt="Универсальная инструкция по обновлению прошивки на Meizu" / loading=lazy> <div class="related-block_item__title">Универсальная инструкция по обновлению прошивки на Meizu</div> </a> </li> <li class="related-block_item col-sm-3 col-xs-6"> <a href="/programma-dlya-zapominanie-parolei-vindovs-10-fleshki-dlya-sbrosa-parolya.html" title="Флешки для сброса пароля операционной системы Windows"> <img class="related-block_item__img" src="/uploads/4ad968f57eaf5dd8e147acab56c79169.jpg" alt="Флешки для сброса пароля операционной системы Windows" / loading=lazy> <div class="related-block_item__title">Флешки для сброса пароля операционной системы Windows</div> </a> </li> <li class="related-block_item col-sm-3 col-xs-6"> <a href="/kaki-prilozheniya-mozhno-udalit-na-android-7-0-kakie-papki-nelzya-udalyat.html" title="Каки приложения можно удалить на андроид 7"> <img class="related-block_item__img" src="/uploads/20c0c9207cec64f7ffca44831fe412b1.jpg" alt="Каки приложения можно удалить на андроид 7" / loading=lazy> <div class="related-block_item__title">Каки приложения можно удалить на андроид 7</div> </a> </li> <li class="related-block_item col-sm-3 col-xs-6"> <a href="/kak-pereproshit-haiskrin-bust-2.html" title="Как перепрошить хайскрин буст 2"> <img class="related-block_item__img" src="/uploads/a8bbf6450f96c8eb4ac84389585e17ca.jpg" alt="Как перепрошить хайскрин буст 2" / loading=lazy> <div class="related-block_item__title">Как перепрошить хайскрин буст 2</div> </a> </li> </ul> </div> </div> </div> <aside id="rightblock" class="rightblock side-block col-lg-3 col-md-3 hidden-sm hidden-xs"> <div class="side-head">Категории:</div> <div id="accordian"> <ul class="list-unstyled"> <li><a href="/category/excel/"><span>Excel</span></a></li> <li><a href="/category/windows/"><span>Windows</span></a></li> <li><a href="/category/word/"><span>Word</span></a></li> <li><a href="/category/browsers/"><span>Браузеры</span></a></li> <li><a href="/category/internet/"><span>Интернет</span></a></li> <li><a href="/category/payment-systems/"><span>Платежные системы</span></a></li> <li><a href="/category/good-to-know/"><span>Полезно знать</span></a></li> <li><a href="/category/programs/"><span>Программы</span></a></li> <li><a href="/category/download-software/"><span>Скачать софт</span></a></li> <li><a href="/category/how-to-open/"><span>Чем открыть</span></a></li> </ul> </div> <div class="side-head">Популярные статьи</div> <ul class="side-top s_a list-unstyled"> <li class="top-news"> <a href="/samsung-j7-4pda-proshivka-proshivka-samsung-galaxy-j7-2016-sm-j710f-chto-nam-ponadobitsya.html" title="Прошивка Samsung Galaxy J7 (2016) SM-J710F"> <img src="/uploads/f453b1da36c258242ad1e22e70136c7a.jpg" alt="Прошивка Samsung Galaxy J7 (2016) SM-J710F" / loading=lazy> <div class="top-news_img">Прошивка Samsung Galaxy J7 (2016) SM-J710F</div> </a> </li> <li class="top-news"> <a href="/mozhno-li-otmenit-oplachennyi-elektronnyi-bilet-kak-vernut.html" title="Как вернуть деньги за билет РЖД купленный по интернету?"> <img src="/uploads/f98c2a0b129b317d3571bbd3dab70427.jpg" alt="Как вернуть деньги за билет РЖД купленный по интернету?" / loading=lazy> <div class="top-news_img">Как вернуть деньги за билет РЖД купленный по интернету?</div> </a> </li> <li class="top-news"> <a href="/privyazat-vindovs-10-k-uchetnoi-zapisi.html" title="Привязать виндовс 10 к учетной записи"> <img src="/uploads/6a891f0ae465e73f3be809ead64770ca.jpg" alt="Привязать виндовс 10 к учетной записи" / loading=lazy> <div class="top-news_img">Привязать виндовс 10 к учетной записи</div> </a> </li> </ul> <script language="javascript"> $(document).ready(function() { var floatsidebar = $("#float-sidebar"); var offset = floatsidebar.offset(); var left = offset.left; var top = offset.top; var width = $("#float-sidebar").width(); var height = $("#float-sidebar").height(); $(window).scroll(function() { var scrollTop = $(window).scrollTop(); if (scrollTop >= top) { $('#float-sidebar').css({ left: left + 'px', position: 'fixed', top: "10px", width: width + "px" }); } else { $('#float-sidebar').css({ position: 'static', }); } }); }); </script> <div id="float-sidebar" style="margin-right: 5px" > </div> </aside> </div> </div> <footer class="footer"> <div class="container"> <div class="col-sm-3 footer_logo"> <p>zhurnaly-onlain.ru - Программы. Браузеры. Интернет. Word. Windows. Полезно знать</p> <form method="post" action=''> <input type="hidden" name="do" value="search" /> <input type="hidden" name="subaction" value="search" /> <input id="story2" name="story" value="Найти ответ" onblur="if(this.value=='') this.value='Поиск...';" onfocus="if(this.value=='Найти ответ') this.value='';" type="text" /> <div class="src-sug"></div> <button class="btn search_btn" type="submit"><span class="glyphicon glyphicon-search"></span></button> </form> </div> <div class="col-sm-6 footer_info"> <p></p> </div> <div class="col-sm-3 footer_links"> <a class="footer_links_item" href="/feedback.html">Обратная связь</a> </div> <div class="col-sm-12 text-center"> </div> <script src="/templates/otvet/js/jquery.min.js"></script> <script src="/templates/otvet/js/libs.js"></script> <script src="/templates/otvet/js/up.js"></script> <script src="/templates/otvet/js/main.js"></script> <script src="/templates/otvet/js/bootstrap.min.js"></script> <script src="/templates/otvet/js/tooltip.js"></script> <p> </p> </div> </footer> </body> </html>