технарь |
Отправлено: 19 января 2012 — 00:41 • Тема: История изменений... • Форум: Limbo CMS |
Ответов: 40 Просмотров: 18571
|
mambo.php
было...
code:function mosLoadModules( $position='left', $horiz=false)
{
global $conn,$Itemid,$access_sql;
$horiz=false;
$query = "SELECT id,title,message,module,ordering,position,showtitle,showon,params"
."\nFROM #__modules"
."\nWHERE published=1 AND position='$position' $access_sql"
."\nORDER BY ordering ASC";
$rs=$conn->Execute($query);
if($rs && $rs->RecordCount()>0 && $rsa = $rs->GetArray() )
{
if ($horiz)
{echo '<table cellpadding="0" cellspacing="0" border="1" width="100%"><tr>';}
foreach($rsa as $module)
{
if ($horiz)
{echo "<td valign=\"top\">";}
if($module['showon']=='' || ($Itemid<>'' && strstr($module['showon'],'_'.$Itemid.'_')) || strstr($module['showon'],'_0_'))
{
$params=parseparams(dbdecode($module['params']));
html_module2( $module, $params, $Itemid );
}
if ($horiz)
{echo "</td>";}
}
if ($horiz)
{echo "\n</tr>\n</table>";}
}
}
стало...
code:function mosLoadModules( $position='left')
{
global $conn,$Itemid,$access_sql;
$query = "SELECT id,title,message,module,ordering,position,showtitle,showon,params"
."\nFROM #__modules"
."\nWHERE published=1 AND position='$position' $access_sql"
."\nORDER BY ordering ASC";
$rs=$conn->Execute($query);
if($rs && $rs->RecordCount()>0 && $rsa = $rs->GetArray() )
{
foreach($rsa as $module)
{
if($module['showon']=='' || ($Itemid<>'' && strstr($module['showon'],'_'.$Itemid.'_')) || strstr($module['showon'],'_0_'))
{
$params=parseparams(dbdecode($module['params']));
html_module2( $module, $params, $Itemid );
}
}
}
}
Убрал куски кода связанные с переменной $horiz т.к. она всегда false и условия никогда не выполнятся. |
технарь |
Отправлено: 18 января 2012 — 23:56 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS |
Ответов: 115 Просмотров: 28626
|
Блин, до чего же тяжело мне дается дизайн. Найти ошибку в коде мне значительно проще чем поправить дизайн. С дизайном значительно хуже прокатывает метод копирования кусков кода, особенно когда дизайн в принципе не нравиться и хочется замутить свой.
Видимо нужно сесть за теорию. |
технарь |
Отправлено: 18 января 2012 — 00:39 • Тема: Методы защиты веб-формы без капчи • Форум: Limbo CMS |
Ответов: 7 Просмотров: 2278
|
Минимальное время заполнения формы
Суть метода заключается в том, что сервер замечает время создания формы. Если пользователь заполнил форму меньше чем за определённое время, то он считается ботом. Время можно варьировать в зависимости от сложности формы.
Верно также, что если форма не была заполнена слишком долго, то что-то не так.
Скрытое поле
Этот метод может показаться странным, но он, похоже, работает. К форме добавляется скрытое поле (скрытое в смысле display:none). Если поле заполнено, то пользователь считается ботом.
Удивительно, но многие простенькие боты заполняют все неизвестные поля.
Обфускация или шифрование HTML
Исходный код страницы является, по сути, вызовом javascript функции вроде document.write( decode( encodedHTML ) ), где encodedHTML — это как-то зашифрованный HTML.
Методы шифрования могут варьироваться от простого эскейпирования значений буковок (буква превращается '%код' ) до некоторых алгоритмов шифрования (например, простенький XOR).
В интернете есть много готовых решений, например, вот тут.
Блокирование определённых user-agent
Некоторые боты используют весьма специфические заголовки user-agent. Можно блокировать запросы не содержащие user-agent вообще или содержащие заведомо плохой заголовок.
В интернете есть списки таких заголовков. Вот, например, от некого Нила Гантона.
«Ловушка» для ботов
Суть этого метода заключается в создании специального раздела сайта вроде "/bot/guestbook". Ссылка на этот раздел не видна для пользователя, однако если бот зайдёт в этот раздел и сделает там хоть что-нибудь, то его IP тут же блокируется.
Раздел должен содержать лакомые для бота слова вроде «email», «submit», «add comment» и тому подобные. Файл «robots.txt» предупреждает хороших ботов.
Хеширование формы (BarsMonster )
При сабмите формы на сервер вычисляется хеш полей формы и добавляется в одно из специальных скрытых полей. Сервер проверяет значение хеша.
Использование прозрачных кнопок (BarsMonster )
У формы есть несколько кнопок типа <input type="image". Лишь на одной из картинок написан текст, остальные — прозрачные. Для сабмита пользователь должен нажать на картинку с текстом.
Динамическое создание формы (maxshopen )
Сама форма полностью создаётся javascript-методом динамчески. Таким образом, форму может увидить лишь пользователь, у которого отработал соответствующий скрипт.
Использование сторонних сервисов (le0pard )
Можно туннелировать трафик через специальный сервис, предназначенный для анализа контента на спам. Примером такого сервиса может быть Akismet
Гибридный подход
По умолчанию форма защищена каким-либо javascript-методом (динамическое создание формы или шифрование данных) или методом из приведённых выше. Если форма была засабмичена некорректно, то возвращается ошибка и просьба заполнить не очень простую капчу.
«Горшочек с медом».
Смысл метода Honeypot прост, как и его реализация. Помимо настоящих полей ввода, делаются скрытые поля. Пользователь их не видит, следовательно, не может их заполнить. Если поле заполнено, комментарий не нужно добавлять. Почему пользователь не заполняет поле понятно, а почему спам-бот заполняет? В ловушке должна быть приманка. В качестве приманки выступает значение атрибута name.
code:<input type="input" name="email" value="" />
<input type="input" name="blablabla" value="" />
Бот, очевидно, умеет находить нужные поля и правильно их заполнять. Бот находит поле email, считает, что дело в шляпе, вбивает в него адрес (кстати, валидный). Заполняет тело комментария, отправляет форму. Обрабатывающий скрипт берет данные из поля blablabla. Это настоящие данные с которыми нужно работать. Скрипт также проверяет, есть ли что-то в поле email. Если есть, комментарий просто не будет добавлен в базу.
Несколько штрихов. Я не знаю, как работают боты. Но думаю, они не дураки. Если поле помечено, как hidden, бот может решить, что ловушка и искать другое поле. Поэтому я скрыл поле с помощью CSS, при этом не присваивал отдельный класс, а использовал селектор [name="email"]. Даже такого простого приема хватило, чтобы за сутки не было ни одного спам-комментария. |
технарь |
Отправлено: 17 января 2012 — 18:06 • Тема: Структура базы данных • Форум: Limbo CMS |
Ответов: 7 Просмотров: 2173
|
Взаимосвязь параметров базы:
1. Таблица категорий
code:categories/section (int) -> sections/id
categories/section ("com_menu") -> menu/menutype (categories/title)
2. Таблица меню
code:menu/link_type ("component")/componentid (int) -> components/id
menu/link_type ("сс")/componentid (int) -> categories/id
3. Таблица контента
code:content/catid (int) -> categories/id
content_frontpage/id (int) -> content/id
content_rating/id (int) -> content/id |
технарь |
Отправлено: 17 января 2012 — 15:04 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS |
Ответов: 115 Просмотров: 28626
|
Проанализировал структуру базы данных, выявил зависимые таблицы и упорядочил структуру. Вроде все работает. Сейчас попробую описать здесь... |
технарь |
Отправлено: 17 января 2012 — 00:20 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS |
Ответов: 115 Просмотров: 28626
|
Поправил. Теперь по умолчанию всегда бросает на главную.
В принципе можно в админцентре прикрутить возможность выбора - с какой страницы стартовать.
Но логичнее все же всегда стартовать с главной. |
технарь |
Отправлено: 16 января 2012 — 20:20 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS |
Ответов: 115 Просмотров: 28626
|
Все, на редакторы забил. А то жизнь закончится, пока закончу.
Начал править движок...
И сходу столкнулся с непоняткой. Дурь какая - то. Вход на сайт зависит от положения пунктов в главном меню. Я в шоке. Это зачем такая связь? Причем завязано на первый пункт главного меню. Если там указанна ссылка на главную страницу - все нормально. Но если там чего другое - все, приплыли. Мне кажется это маразм какой-то. Я перепишу код, что бы по умолчанию юзер всегда попадал на "главную" вне зависимости от положения пунктов меню. |
технарь |
Отправлено: 14 января 2012 — 23:59 • Тема: Создание и редактирование модулей Limbo • Форум: Limbo CMS |
Ответов: 2 Просмотров: 1087
|
Параметры XML файла модуля Joomla
Цитата: <param name=»moduleclass_sfx» type=»text» default=»" label=»CSS-cуффикс класса модуля» description=»Суффикс, который будет использован в описании класса (table.moduletable) таблицы стилей (CSS) модуля. Это позволяет использовать индивидуальный стиль модуля.» /> – здесь указывается, что нужно вывести для редактирования системный параметр определяющий суффикс CSS класса модуля.
<param name=»sometext» type=»textarea» cols=»80″ rows=»5″ default=»" label=»Текст» description=»Обычный текст или текст в формате HTML, который будет выводиться в блоке модуля.» /> – данный параметр служит для вывода в административной части модуля многострочного текстового поля. Запомните имя этого параметра – «sometext». Это имя будет использоваться в дальнейшем.
</params> – закрывает перечень параметров модуля.
</mosinstall> – закрывает инфомационные данные модуля.
В XML файле модуля все необходимые параметры помещаются между тегами <params></params>, в виде списка.
Каждый параметр может быть прописан в XML файле различными способами. Все зависит от того, что это за параметр, как мы хотим использовать его в дальнейшем, в каком виде он должен быть представлен пользователю в административной части и т.д. Пример описания простейшего параметра:
<param name=»items» type=»text» default=»" label=»Количество объектов» description=»Количество показываемых объектов» />
В ряде случаев, параметр может быть прописан так, что его выходные данные смогут принять только какое-то одно фиксированное значение. Это делается с помощью «радио-кнопок» или выпадающих списков. Конструкция описания параметра при этом сильно видоизменяется, а сами фиксированные значения прописываются в тегах «option». Например:
<param name=»item_title» type=»list» default=»0″ label=»Заголовок объекта» description=»Показывать или нет заголовок объекта»>
<option value=»0″>Нет</option>
<option value=»1″>Да</option>
</param>
В данном примере, пользователь сможет задать параметру «item_title» только одно из двух, заранее определенных разработчиком модуля значений – 0 или 1. Свойству «default» в такой конструкции необходимо присвоить одно из опциональных значений «value». В приведенном примере default=»0″, значит при первом пуске административной части модуля, указатель «option» будет установлен в положение «Нет».
Каждый параметр модуля должен иметь обязательное свойство «name», которое служит идентификатором этого параметра. Значение этого свойства должно быть уникальным. Так же параметр должен быть дополнительно описан с помощью ряда свойств, таких как «type» – тип, «default» – значение параметра по умолчанию, «label» – наименование параметра и «description» – описание параметра.
Помимо основных свойств, параметр может содержать еще ряд дополнительных. Некоторые из них нужны лишь для изменения внешнего вида поля, в которое пользователь будет вводить данные, некоторые служат дополнением к типу параметра. Все свойства параметра актуальны лишь в административной части модуля. Для программного скрипта модуля они никокого значения не несут.
Пример использования дополнительных параметров в XML файле модуля:
<param name=»sometext» type=»textarea» cols=»80″ rows=»5″ default=»" label=»Текст» description=»Обычный текст или текст в формате HTML, который будет выводиться в блоке модуля.» />
Здесь свойства «cols» и «rows» определяют только ширину и высоту многострочного поля для ввода текста – «textarea» в административной части модуля.
Теперь давайте рассмотрим, какие свойства можно задавать параметрам в XML файле.
Свойство «name» – имя параметра.
Как уже говорилось, свойство «name» это идентификатор параметра, с помощью которого мы можем получить его значение в процессе выполнения скрипта модуля.
Имена для параметров модуля устанавливает разработчик в процессе его создания. Однако существуют еще зарезервированный CMS Joomla список имен параметров, которые служат для строго определенных целей. Это имена системных параметров.
moduleclass_sfx – это суффикс, который будет автоматически присоединен Joomla (Джумлой) ко всем CSS классам данного модуля, при его выводе на страницу сайта.
Пример использования параметра moduleclass_sfx в XML файле модуля:
<param name=»moduleclass_sfx» type=»text» default=»" label=»CSS-cуффикс класса модуля» description=»Суффикс, который будет использован в описании класса (table.moduletable) таблицы стилей (CSS) модуля. Это позволяет использовать индивидуальный стиль модуля.» />
сache – позволяет принудительно включить/отключить кэширование модуля.
Пример использования параметра cache в XML файле модуля:
<param name=»cache» type=»radio» default=»0″ label=»Разрешить кэширование» description=»Выберите, кэшировать ли содержимое этого модуля»>
<option value=»0″>Нет</option>
<option value=»1″>Да</option>
</param> |
технарь |
Отправлено: 10 января 2012 — 00:40 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS |
Ответов: 115 Просмотров: 28626
|
По моему я буду править редактор вечно.
Хотел было уже заканчивать, но черт меня дернул глянуть как это будет выглядеть в других браузерах.
То что красиво и ровно выглядело в Опере, в Файрфоксе разъхалось, а в IE редактор вообще не запустился.
Вторую половину дня потратил на поиски решения универсального для обоих браузеров. Идеального решения так и не нашел - выбрал компромисный вариант. А почему IE отказывается работать с редактором буду разбираться позже. |
|