Записки программиста. Cms perl


Краткий обзор качества коммерческой CMS на Perl / Хабр

В процессе занятия фрилансом мне периодически попадаются на препарирование сайты написанные на Perl. Глядя на код, я понимаю, откуда появилась дурная слава Perl в области Web разработки. Но не будем углубляться в холивар. Вчера мне в руки попал движок X1-forge. Надо особо отметить что он активно продаётся и весьма нескромно расхваливается на сайте. Итак, что же с ним не так? Клиент обратился с жалобой на невозможность залогиниться в админку. По словам клиента произошел сбой после удаления с сайта некоего вируса (как оказалось позже это было простым совпадением). После изучения кода, обнаруживаю что кукис после ввода логина/пароля в админку ставится с параметром:Cookie_Exp_Date = "Sat, 31-Dec-2011 12:00:00 GMT"; Т.е. с первого января 2012 года войти в админку можно, но только на 1 запрос, ничего изменить/сохранить нельзя. Браво! Иду в файл cgi-bin/admin/cookie.pl чтобы поправить это безобразие и вижу:##################### ## Site Makers X-forge (10.01) | Программный модуль интернет-системы ## (c) ООО "Сайт Мэйкерс". 2008. Все права защищены. ## Производится с 1998 года. ## Лицензиар: ООО "Сайт Мэйкерс" | +7 (495) 544-88-61 | [email protected] | www.sitemakers.ru ## Сайт продукта: www.xforge.ru ##################### ## Копирование, модификация, перезапись, перемещение, удаление и вывод на печать данного файла запрещены. ## Указанные операции могут быть произведены только сотрудниками службы технической поддержки ООО "Сайт Мэйкерс". ## Читая эти строки знайте, что прямо сейчас неосторожными действиями Вы можете нанести ущерб Вашему интернет-проекту. ## Немедленно выйдите из просмотра файла БЕЗ СОХРАНЕНИЯ и в будущем не открывайте никаких файлов программных модулей. #####################

Вроде всё как надо, если бы не одно «но» — сам код взят из свободного источника (я и сам им пользовался — потому и узнал) и вряд ли может продаваться с таким копирайтом. Ну да ладно, правлю дату, смотрю в FireBug как ставятся кукисы — и тут вылавливаю его, бага с большой буквы. Система после логина в админку ставит два кукиса: 1. codeadm — содержит логин пользователя (универсальный admin вполне годится) 2. loginadm — содержит текст «loginadm», подтверждая факт логина в админку И всё! Никаких больше проверок! А зачем, ведь кукисы подделке не подлежат и им можно доверять абсолютно! Как-то это не вяжется сПолитика комании Сайт Мэйкерс с самого начала ее образования - организация безопасных ресурсов и прежде всего безопасных Интернет-магазинов. Эта политика имеет наиважнейшее значение для владельцев ресурсов, которые понимают насколько серьезные потери могут понести активные Интернет-магазины от прорех в безопасности, которыми воспользовались злоумышленники или конкуренты. Но и это ещё не всё. За окном 21-й век (уже более десяти лет, да), а эти профессионалы не используют режим strict! Зато, активно используют говнокод:my $fii=0, @FIL=(), $FIS=0, $pat, $file_text=""; Вообще качество кода наводит на мысли о команде школьников. И это коммерческий продукт. Ну да ладно, ССЗБ. Зацепил ещё такой момент — в качестве БД используются плоские файлы. Оно бы и ладно, но называть директорию с такими файлами «кластером» и писать что:ни одна другая система была не способна обрабатывать требуемые объемы с требуемым быстродействием, требуемой надежностью и требуемым удобством обслуживания это черезчур. Посмотрел бы я как всю эту инновацию масштабировать на пару десятков машин.

Мораль же будет такова — доверяй, но проверяй.

PS. Мне в руки попала версия 10. Текущей является версия 11.

habr.com

Perl CMS : гигантомания или слишком умные?

Решил на досуге посмотреть какие-нибудь интересные open source CMS на perl.. посмотрел и очень удивился почти полным отсутствием таковых, тогда как на PHP они плодятся пачкам и каждый день. Похоже Movable Type - это самое достойное из движков расчитанных на небольшие/средние сайты (он же и под mod_perl работает если нужно), но он и не совсем уж и бесплатный (ограниченная лицензия). Ну а из прочих все какие-то мастодонты встречаются, которые позиционируют себя как "content management system and an application framework 2 in 1":

- WebGUI http://www.plainblack.com/spreadwebguiдовольно много к нему аддон-ов ,плагинов. Расчитан на работу под mod_perl. Но мне что-то он не очень понравился по архитектуре, хотя лишь слегка покопался в его внутренностях.- Bricolage http://www.bricolage.cc/ модная тема в последнее время в perl сообществе.. Что-то его активно продвигают, хотя вещь в себе, которую еще делать и делать. "CMS корпоративного уровня".. угу. Этот проект принимает участие в гуглевском Summer of Code..и судя по тому, что к нему еще нужно привинтить, так он "under constraction" ( подробнее тут ) (а ниже я про него еще одну забавную штуку напишу).Использует шаблонизаторы: Mason, Template Toolkit, или HTML::Template.Статья на Perl.com: Content Management with Bricolage

- Krang http://krang.sourceforge.net/ то, что как говорят авторы "выросло" из неудобоваримости Bricolage. В состав разработчиков входят весьма уважаемые перлисты (среди них Sam Tregar - автор HTML::Template, Class-XPath-1.4, XML::Validator::Schema и т.д.,Jesse Erlbaum автор замечательного модуля CGI::Application). Тоже "немаленький" проектик с минималистичным интерфейсом, но довольно прикольной архитектурой. Тоже заточен под mod_perl, есть rpm пакеты для удобства установки). Меня повеселили данные, сравнивающие Krang и Bricolage (по воз-тям и производительности), "вот самая суть":

The following table compares a few common operations on Bricolage and Krang system with approximately 7,000 stories, running on identical machines (Redhat Linux 7.3, dual P4-2Ghz, 4GB of ram, with their databases tuned appropriately).

Operation Krangv1.011 Bricolagev1.4.6
Single Story Publish 0.33 seconds 4 seconds
Total Site Publish 38 minutes 6.5 hours
Story Find by Title 0.15 seconds 2 seconds

7000 статей + они делают вывод в XML+ много авторов и категорий, но 6,5 часов для всего это дела ИМХО как-то не але (и все это под mod_perl)Кстати, если интересно, тут можно увидеть произ-ть Kranga при различной нагрузке. Шаблонизатор HTML::Template.. не знаю, мне кажется что для подобного проекта учитывая его ООП было бы интересно использовать что-то "понавороченее", типа Template-Toolkit.

К чему я все это? Возможно я плохо искал, но что-то ничего толкового, "земного" не нашел. Стоит ли пытаться соединить CMS и Framework в одном? Получается кастрированный и ограниченный Framework и "перекаченный" и намудренный, CMS.

О Framework.. Недавно прочитал статью о Catalyst ( http://www.perl.com/pub/a/2005/06/02/catalyst.html ) пример в статье ИМХО несколько бестолковый, но сама эта штука меня заинтересовала, весьма приятно смотрится внутри :) MVC:Model: Class::DBI, Plucene, Net::LDAP (ну вот не очень мне нравится Class::DBI - c виду и поначалу хорош, но там многое надо довинчивать + тормоза при больших выборках.)View: Template Toolkit, Mason, HTML::TemplateController: свои каталистические замутки.

Сайт проекта: http://catalyst.perl.org/ с документацией пока не але (про примеры молчу), но может разродятся, он сейчас весьма активно развивается. Да... Maypole загнулся, OpenInteract в свободном плавании (ранее разработка спонсировалась), печальна жизнь open sourca ,если нет рядом заинтересованного спонсора, на энтузиазме далеко и надолго не уедешь ..

P.S. во я накатал!

green-kakadu.livejournal.com

Определение CMS средствами Perl | Записки программиста

Недавно написал несколько скриптов, позволяющих автоматически определять, какая CMS (Content Management System, система управления контентом) используется на сайте. Вот решил выложить на всеобщее обозрение.

В архиве вы найдете четыре скрипта, каждый для своей CMS — Drupal, Joomla, WordPress и TextPattern. Рассмотрю устройство одного из них, поскольку все работают по одному принципу.

#/usr/bin/perl

# iswp.pl script# (c) Alexandr A Alexeev 2009 | http://eax.me/

use strict;

my $dn = shift;

print "Invalid domain name\n" and exit 1  unless($dn =~ /^[a-z0-9\.\-]+$/);

my $data = `wget -q $dn -O -`;

print "Download failed: $?\n" and exit 2 if($?);

my $cnt = 0;

$cnt ++ if($data =~ /UTF\-8/gi);$cnt ++ if($data =~ /\/wp\-content\/themes\//gi);$cnt ++ if($data =~ /\/wp\-content\/plugins\//gi);$cnt ++ if($data =~ /WordPress/gi);$cnt ++ if($data =~ /\/wp\-includes\//);$cnt ++ if($data =~ /\/xmlrpc\.php/);

$cnt = int $cnt * 100 / 6;

print "WordPress:$cnt\n";

Как видите, все очень просто — скрипт принимает в качества аргумента доменное имя, обращается к соответствующему сайту с помощью wget, затем ищет в HTML-коде сигнатуры WordPress’а. Чем больше сигнатур найдено, тем больше вероятность, что данный сайт работает на WordPress.

Я писал скрипты так, что если найдено больше половины сигнатур (вероятность больше 50%), можно быть почти уверенными, что CMS опознана. Так что выводимое скриптом число не следует воспринимать чисто как вероятность.

Можно увеличить точность определения, если для каждого сайта вызывать каждый скрипт. Например, если для какого-то сайта iswp.pl вернул 50%, а isdrupal.pl и остальные вернули 30% или меньше, значит мы точно имеем дело с WordPress. Если же несколько скриптов вернули большое (больше 50%) значение, значит CMS не опознана.

Приведенные скрипты имеют несколько существенных, на мой взгляд, недостатков. Во-первых, и это не сложно исправить, HTML-код не кэшируется. Это может создать большие проблемы при массовом определении движков. Что, если мне захочется узнать статистику используемых CMS, скажем, по всему рунету?

Во-вторых, мы не определяем версию CMS. В ряде случаев это не сложно сделать, например WordPress вставляет в HTML-код соответствующий meta-тег:

<meta name="generator" content="WordPress 2.8.5" />

Другие CMS часто пишут свою версию в подвале (footer) страницы. Но на мой взгляд, это — задача уже других скриптов, которые следует использовать уже после того, как CMS была определена.

В-третьих, мы производим анализ сайта только по одной, главной странице. Встречаются сайты, главная страница которых просто содержит приветственное сообщение, на них с помощью моих скриптов ничего обнаружить не удастся. На сайте может быть использовано несколько CMS. Кроме того, анализ нескольких страниц мог бы существенно увеличить точность определения. Например, наличие каталога /wp-admin/ явно свидетельствует об использовании WordPress (да, это моя любимая CMS, потому ее название так часто встречается в тексте).

В настоящее время я подумываю начать работу над новой серией скриптов. В них я добавлю кэширование HTML-кода и автоматический сбор сигнатур. Последнее позволит существенно увеличить число определяемых движков. Кроме того, проверке будет подвергаться не доменное имя, а конкретный URL. Если быть точнее, код конкретной страницы, потому что скрипты будут читать его через STDIN, из кэша.

Дополнение: Нашел в сети сервис автоматического определения CMS, может кому-нибудь пригодится: http://2ip.ru/cms/. Кстати, на этом сайте вообще много интересных скриптов.

Дополнение: Продолжение эпопеи об определении CMS — Автоматическое определение движка форума.

Метки: Perl.

eax.me


Prostoy-Site | Все права защищены © 2018 | Карта сайта