
Я нашёл, как мне кажется, стоющую вещь и хочу знать, что думают другие.
Итак, NovaBoard — недавно появившийся форумный движок, на который заметное влияние оказал IPB, хотя, конечно, ни бита заимствованного кода там нет и автор не пытался копировать функции других форумов (хотя признаёт, что сознательно использовал IPB-подобное оформление, поскольку оно кажется ему наиболее удобным из всех, с чем лично я согласен чуть более, чем полностью).
Дополнительные поля профиля, короткие и понятные URL, все вообразимые способы модерирования, RSS, группы, ранги, жалобы на сообщения, предупреждения, баны, вложения, опросы, прикреплённые темы и глобальные объявления, подписки на темы, CAPTCHA, аватары, подписи, личные сообщения — я перечислил не всё, что есть уже в β-версии. RC1 ожидается в ближайшее время, но и нынешняя версия очень стабильна.
Из функционала, не так часто встроенного в форумы по умолчанию:
- Короткие и понятные URL вида /topic/123 или /messages/inbox. Можно было бы сделать и нагляднее (с названием топика в URL, на радость SEOшникам =)), но это было бы длиннее. Можно предложить реализовать как опцию.
- Простое создание тем оформления и модулей. Это подчёркивается особо.
- Простая установка модулей прямо из админки (прямая модификация файлов форума тоже допустима, впрочем).
- Ожидается уникальная система борьбы со спамом, в дополнение к традиционным.
О функциях из первых рук можно почитать на
офсайте или на
форуме поддержки. В числе прочего,
о схожести с IPB. Доступны
демо и
бесплатный хостинг.
Сообщество пока маленькое, на форуме зарегистрировано ~100 человек. Инициатор из Шотландии, русских там пока нет совсем. Сейчас сделаю перевод интерфейса — глядишь, подтянутся.
Крайне интересно мнение профессионалов о качестве кода.
Кроме того, хотелось бы обратить внимание сообщества на лицензию: бесплатно, код открыт, модифицировать можно, но распространять можно только модифицированный код, но не код самого движка. Понятно, что это направлено против всяких левых «сборок», но всё же немного смущает.
комментарии (115)
Кстати, интересно также сравнение производительности с тем, что вы уже используете: PHPBB, SMF, IPB, vBulletin, FluxBB, et cetera. Ставить всё вместе не хочется, но ежели у кого уже стоит — отличный шанс сравнить (предварительно, конечно, одинаково набив системы контентом).
Я на официальном форуме уже побеседовал, и там «официальный тестер» сказал, что NovaBoard быстрее всех. Я ему, как заинтересованному лицу, на слово верить не склонен, так что независимые тесты приветствуются. Да и обсуждение там скатилось к нападкам на jQuery =)
Особенно интересно мнение людей по поводу борьбы со спамом на формах!
Попробовав сравнить там SMF и PhpBB, увидел что сравнивается PhpBB 3.0.2 (July 10, 2008) и SMF 1.1.rc3 (August 19, 2006). Хотя текущая версия SMF — 1.1.7 (вышла на днях), да и SMF2 уже на носу.
Немудрено что у них PhpBB3 лучший.
От таких говносайтов только вред, а не польза.
Меня всегда радовал их собственный форум на котором онлайн постоянно непонятно сколько тысяч сидит
Из плюсов: обновление до с свежей версии — одним кликом в админке; установка дополнений делается двумя кликами (при условии, что вам не нужно перевести дополнение на другой язык или переоформить под другую тему).
Огорчила мертвая привязанность к MySQL и отсутвие полного разделения логики и отображение.
Порадовало то, что пароли хранятся в виде хешей с солью.
Я не поругаться, я скорее узнать, может кто видел нечто свежее в форумостроении? Я например, терпеть не могу искать что либо на форумах.
(писал много, понял что одни маты с примерами, стёр)
И ксати не я один считаю что сам «классический дизайн» форумов просто наказание. Нагромождение лишней информации в каждом посте. На месте автора я бы трижды подумал пржде чем копировать фейс IPB. Ну на вкус и цвет как говориться…
Несмотря на все это не станет проблемой для тех кому нужен именно classic форум и в код лезть не собирается.
Вот так.
// Get forum ID…
$query = «select FORUM_ID from {$db_prefix}posts WHERE TOPIC_ID='$topic' AND TITLE!=''»;
$result = mysql_query($query) or die(«addreply.php — Error in query: $query»);
$forum_id = mysql_result($result, 0);
смешно до ужаса, каждый новый опенсорц движок с этого начинается, а потом через год «ааааааа нас хакнули!!! все пароли снесли и пользователей!!! зря поставил аааа!!!»
подсвеченный код тут
phpdude.ru/code/BZbYaY
попроще смотреть, код совершенно уязвим, хотя конечно может он чудесным образов филтруется на входе, но не верю я в это. будет время, копну глубже.
echo «ACCESS DENIEDYou cannot access this file directly.»;
exit();
}
Что за детский сад...((
> $_GET = array_map(«filter_quotes»,$_GET);
В корне неверный подход, это изврат. Данные ескейпятся одним способом при обращении к БД (mysql_real_escape_string($str, $connection)), и другим при выводе в HTML (htmlspecialchars(.., ENT_QUOTES, CHARSET)).
Кстати, а почему бы не сделать некую функцию-фильтр, а потом просто везде вместо $_GET писать secure($_GET) или что-то в таком духе? И затем поиском по коду находить и заменять все это дело.
Что вообще за бре — искейпить входные переменные бекслешем. Вы и пользователю их в таком виде выводить будете? В большой системе вся эта ерунда только добавляет сложности и глюков.
strval ничего не сделает с ', а это значит что скрипт всеравно будет уязвим.
strval(test'test) вернет test'test
sql::getInstance()->query("SELECT * FROM cms_content WHERE id='%id%'", array("id" => $_REQUEST[id]));и все дела, перед реплейсом плейсхолдеров данные из массива эскейпятся и инъекция провалится
У меня так: $db->select('cms_content', '*', array(«id» => $_REQUEST[id]));
…
А, в общем, прямые SQL-запросы, даже в таком виде, как у меня — моветон. ORM'ы рулят :)
а вообще, мне нравится писать запросы без плейсхолдеров, я давно сделал себе функцию escape в классе DB, которая в зависимости от переданного значения, либо экранирует значение переменной — обычно для выборки, либо делает из массива строку вида `ключ`='значение',…, для обновления или вставки.
Распространяется под GPL. Правда, как это часто бывает в проектах «под себя», нет никакой документации :)
…
Давно пора делать команду и рекламировать фреймворк. А то в одиночку скучно :)
function getRequest ($key, $type = 'string') {
switch ($type) {
case 'string': return isset ($_REQUEST[$key])? mysql_real_escape_string ($_REQUEST[$key]): '';
}
…
}
Такой подход мне кажется оптимальным: отпадает необходимость проверять все входные данные в каждой строчке, если принимать их через функцию.
В РНР6, кстати, этой фигни вообще не будет, и слава богу.
magic_quotes — зло.
Отключаем или в php.ini или в .htaccess ( php_flag magic_quotes_gpc off или php_value magic_quotes_gpc Off) или «в ручную» на входе:
if (get_magic_quotes_gpc()) {
function undoMagicQuotes($array, $topLevel=true) {
$newArray = array();
foreach($array as $key => $value) {
if (!$topLevel) {
$key = stripslashes($key);
}
if (is_array($value)) {
$newArray[$key] = undoMagicQuotes($value, false);
}
else {
$newArray[$key] = stripslashes($value);
}
}
return $newArray;
}
$_GET = undoMagicQuotes($_GET);
$_POST = undoMagicQuotes($_POST);
$_COOKIE = undoMagicQuotes($_COOKIE);
$_REQUEST = undoMagicQuotes($_REQUEST);
}
Если не отключить в движке, потом могут возникнуть проблемы у юзеров движка.
name[nested]
тогда в массиве _GET оно будет присутствовать как
$_GET = array(
«name = array(
„nested“ => „value“,
),
);
…
if (is_array($value)) {
$newArray[$key] = undoMagicQuotes($value, false);
}
…
или это я чего-то не втыкаю?
if (!$topLevel) {
$key = stripslashes($key);
}
без подсветки синтаксиса глаз не увидел $key как аргумент :) глазу показалось, что там тоже $value…
if (get_magic_quotes_gpc()) die;
… и все дела ;)
Скрипты нужно писать так, чтобы они нормально работали как с включенной так и с выключенной директивой. А выключить на сервере не всегда представляется возможным, так как там могут находиться другие скрипты которые нормально работают только при включенной magic_quotes_gpc
$result312 = mysql_query($query312) or die(«addreply.php — Error in query: $query312»);
while ($results312 = mysql_fetch_array($result312)){
$can_reply_topics = $results312['CAN_REPLY_TOPICS'];
$can_add_attachment = $results312['CAN_ADD_ATTACHMENT'];
}
да, код ужасает
Сейчас только UTF-8, если не хочешь «проблем» ;)
А не отображается она потому что во фрейме чата прописана кодировка charset=ISO-8859-1
Не понятно тогда почему авторы движка не используют UTF-8 :)
NovaBoard, новорождённый конкурент IPB и PHPBBДа какой он конкурент? Назовите хоть одно конкурентное свойство? Дырявый и проблемный в дальнейшей поддержке код? Унылый дизайн? Десятикилобайтный .htaccess? :)
Конкурент?!
А вообще, что-то на горизонте особо не видно удобных и простых в эксплуатации и модерировании движков форумов. Кое-где есть проблески надежды, но очень слабые.
В итоге приходится жёстко допиливать имеющиеся решения, и из существующих зол выбирать меньшее. К тому же, большинство крупных проектов исторически и архитектурно уходят корнями в прошлый век, ну и надежд на перемены там мало…
Я вижу, автор топика запостил ссылку на это обсуждение на официальном форуме. Это дело разработчкиа, прислушаться или нет. Может, придётся переписать всё с нуля, используя или не используя фреймворки и разные паттерны/техники ниндзя, но это не нечто невозможное. Увидим.
Если кому есть что сказать — можете сказать там, кстати.
Вам слово «новорождённый» в заголовке ничего не говорит? :]Угу. Ещё бывает слово «мертворождённый». Оно тут больше подходит. :)
Осмотр кода даёт основания для выводов об уровне разработчика. Подобных проектов, таких движков форумов тьма. И они рано или поздно перестают развиваться, ибо никому не нужны.
Насчёт выводов про движки… В своё время делал серьёзный поиск по существующим движкам. Проверил около полутора десятков движков. Так что форумов я насмотрелся всяких.
Это похоже на то, как начинающие программисты пишут гостевухи. Некоторые из них впадают в такой программистский экстаз, что пишут навороченные многошаговые инсталляторы, многостраничные админки, и тонны наворотов, при этом оставляя эти гостевухи абсолютно дырявыми. И что, много народу юзает эти гостевухи? Тут похожая ситуация ситуация.
P.S: Он, конечно, может повторить судьбу ipb и где-то через 4 года вычистить весь имеющийся быдлокод, залатать дыры и дописать фичи. Если так — желаю удачи. В целом же — начало крайне неудачное.
P.P.S: Почитайте комментарии других хабраюзеров, посмотрешвих код.
demo.novaboard.net/
Поскольку я не профессиональный программист, мне захотелось услышать мнение таковых. Результат Вы можете наблюдать. Движок мог стать открытием. Но не стал. Стоила ли попытка плюсов топику и американских горок в карме — не мне решать, не ради них и делалось. Я результатами доволен.
alert('Hackers hui!');Оперативно. Хабраэффект? :)
Правда там кеши с salt, поэтому расшифровать не получиться…
ься…», однакоЗнаю пару собачек с такой кличкой =)
> Nice of them to actively keep a record of their attempts online though. Saves me the trouble of pulling together evidence when forwarding it on to the relevant authorities :)
…
> It's still annoying to have it on a public facing website though. For them to believe that editing the forum description is classed as a successful XSS hack is quite funny though.
Уникальная система антиспама — не такая уж и уникальная на самом деле.