Вы не зашли.
Скриншот: http://d.pr/i/pF0G
Еще достаточно сырой плагин, не стесняйтесь отписываться о багах.
Установка.
В файле engine/plugins/auth_basic/auth_basic.php:
После строчек:
LoadPluginLang('auth_basic', 'auth','','auth');
$error = 0;
$userid = 0;
$values['login'] = trim($values['login']);
/*
* reg_invites by wget
*/
$values['invite'] = trim($_POST['invite']);
if (pluginGetVariable('reg_invites', 'enabled') && !($mysql->record('SELECT `id` FROM '.uprefix.'_invites WHERE `invite`='.db_squote($values$
LoadPluginLang('reg_invites', 'config','','',':');
$msg = $lang['reg_invites:invalidInvite'];
return 0;
}
/*
* /end reg_invites
*/
Дальше в той же функции перед:
return ($userid>0)?$userid:1;
но после "}" вставляем:
/*
* reg_invites by wget
*/
if (pluginGetVariable('reg_invites', 'enabled') && $userid) {
$mysql->result("UPDATE ".uprefix."_invites SET `userid`='".$userid."' WHERE `invite`=".db_squote($values['invite'])." LIMIT 1;");
}
/*
* /end reg_invites
*/
В шаблоне registration.tpl после {entries} но перед [captcha]:
<tr>
<td width="50%" style="padding: 5px;" class="contentEntry1">Инвайт<br /><small>Инвайт - это приглашение для регистрации на данном ресурсе</small></td>
<td width="50%" style="padding: 5px;" class="contentEntry2"><input type="text" name="invite"/></td>
</tr>
И собственно ставим сам плагин.
http://dev.minehell.ru/dl/reg_invites.zip
http://d.pr/f/U9jf
А, ну и хотел предложить добавить мой код в оффициальный свн, имхо - лишним не будет
Оформил в качестве плагина, подсветка осуществляется с помощью GeSHi. Поддерживает огромное множество языков.
Скриншот:
http://d.pr/i/HwDL
Установка:
В css вашего шаблона добавить:
/*geshi*/
.geshi-syn ol {display: inline-block;}
И установить плагин в панели. Использование:
[ syntax=php ]<?php die(); ?>[ /syntax ]
Ссылка на загрузку:
http://dev.minehell.ru/ngcms/engine/plu … syntax.zip
http://d.pr/f/U9jf
есть альтернативный сервер - http://antispam.typepad.com/
для него сервер в настройках плагина - api.antispam.typepad.com, ключ получать на сайте.
после долгого ожидания (~20 дней, ну вообще ***дец) ответа от поддержки команды Yandex.CleanWeb API, возможно таки перепишу плагин под него.
может настройками php запрещен доступ в папки другого сайта? (open_basedir или т.п.)
Перенесите пожалуйста тему в раздел "Страницы плагинов", там создать тему прав не хватает.
Наименование: comments_akismet
Описание: Плагин проверяет добавляемые комментарии на спам с помощью сервиса Akismet.
Текущая версия: 0.1 [выпуск: 30.08.2012]
Функции
- Проверка сообщения на спам. В случае, если akismet вынесет положительный вердик, комментарий добавлен не будет.
Планы на будущее:
- Добавлять спам-комментарии с пометкой о том, что комментарий является спамом.
Как получить API-ключ:
Для сервера rest.akismet.com:
Идем по ссылке https://akismet.com/signup/ и выбираем режим Personal.
Ползунок цены выкручиваем на минимум, получится $0.00/yr. Вводим свои
данные, жмем Continue. На указанную почту придет API-ключ.
Скриншоты:
Ссылка на скачку:
http://dev.minehell.ru/dl/comments_akismet.zip
http://anonymousdelivers.us/20051
он же во вложении
wget, выводить по аналогии с выводом в полную новость
сам фильтр посмотри comments\inc\comments.lib.php
не совсем понял, мне же нужно перехватывать не вывод, а добавление комментария. если комментарий посчитается спамом, то мы выводим капчу.
//..понял
Вобщем, я написал проверку комментария на спам при отправке ( на основе http://api.yandex.ru/cleanweb/ ). Но вот добиться того, чтобы API комментарий посчитал спамом у меня не получилось, посему прошу о помощи. Свои правки я конечно же выложу в общий доступ и распишу где как и что править, чтобы заработал антиспам.
dev.minehell.ru /ngcms/none/gygygygy-prikolno-yyyy.html - попробуйте добиться. пока что нужно вводить обе капчи (старую я отключу как будет дебаг). У кого получится, отпишите сюда какой комментарий вы писали и какой email вводили (имя пользователя не учитывается). Если так и не разберемся с этим апи - сделаю под другой.
//кстати, сначала хотел оформить как плагин, но не понял как перехватить добавление комментария, может кто с этим помочь?
p.s. извините, если не тот раздел.
wget пишет:irbees2008 пишет:при переходе в полную новость
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, admin@main-hosting.eu and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
версия [17.08.2012] 0.9.3 + SVN [SVN1047]
mod_rewrite установлен?
а по подробнее можно?что это mod_rewrite,и где его искать
апачевский модуль. вообще, если можешь, скинь error log сюда.
вообще лучше отпиши в техподдержку хостинга, там должны помочь
Для начала был выбран js-скрипт для подсветки кода в браузере - jquery-syntaxhighlighter. Он был исправлен под себя, перелопачен (подправлены стили и скрипт). Скачаем и распакуем в папку с шаблоном наш скрипт. Сразу скажу, что он требует jquery, так что если ваш шаблон не использует его, то его тоже надо подключить. Делается это так:
<head>
...
<script type="text/javascript" src="{tpl_url}/syntaxhighlighter/scripts/jquery-1.4.2.min.js"></script>
...
</head>
После того, как мы подключили JQuery, нужно подключить Highlighter и проинициализировать его:
...
<подключение JQuery>
<script type="text/javascript" src="{tpl_url}/syntaxhighlighter/scripts/jquery.syntaxhighlighter.min.js"></script>
<script type="text/javascript">$.SyntaxHighlighter.init();</script>
...
Готово! Больше никаких правок в шаблон вносить не надо.
Теперь открываем engine/includes/classes/parse.class.php. Наш тег [ code ] будет использоваться так - [ code=<язык> ], поэтому будем изменять регулярку. Ищем такой фрагмент:
// Special BB tag [ code] - blocks all other tags inside
while (preg_match("#\[code\](.+?)\[/code\]#ies", $content, $res)) {
$content = str_replace($res[0], '<pre>'.str_replace(array('[', '<'), array('[', '<'), $res[1]).'</pre>', $content);
}
И меняем на:
// Special BB tag [ code] - blocks all other tags inside
// assd: replaced: [code\] => [code=(.*?)\] | '<pre>' => '<pre class="language-'.$res[1].'">' | $res[1]).'</pre>' => $res[2]).'</pre>'
while (preg_match("#\[code=(.*?)\](.+?)\[/code\]#ies", $content, $res)) {
$content = str_replace($res[0], '<pre class="language-'.$res[1].'">'.str_replace(array('[', '<'), array('[', '<'), $res[2]).'</pre>', $content);
$content = str_replace('<br>', "\n", $content);
}
Далее ищем:
$content = preg_replace("/<code>(.*?)<\/code>/es", "phphighlight('$1')", $content);
$content = str_replace("\n</p>\n", "</p>", $content);
И добавляем после этих строк:
#Added to prevent adding <br />s in highlighted code
preg_match_all("#<pre class=\\\"brush: (.*?)\\\">(.+?)</pre>#ies", $content, $ress);
foreach ($ress as $res) {
$content = str_replace($res[0],str_replace('<br />', "\n", $res[0]),$content);
}
Все, сохраняем. После этих нехитрых манипуляций подсветка кода должна заработать.
няшка.
//by wget
при переходе в полную новость
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, admin@main-hosting.eu and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
версия [17.08.2012] 0.9.3 + SVN [SVN1047]
mod_rewrite установлен?
wget пишет:ROZARD пишет:wget, Ты это к тому что не фильтруется?
К тому, что да. Я же вроде бы достаточно расписал, даже привел конкретный запрос.
Хотел написать, что не критично, но нет чуть критично. Одно тянет другое.
Спасибо.
SQL-иньекция это всегда критично. А так, в целом, движок отличный.
wget, Ты это к тому что не фильтруется?
К тому, что да. Я же вроде бы достаточно расписал, даже привел конкретный запрос. Или что-то пояснить надо?
Проверил, всё там фильтруется.
if (!is_array($row = $mysql->record("select * from ".prefix."_news where id = ".db_squote($id),1))) {
Скуля в запросе выбора комментов, смотри сообщение об ошибке.
p.s. (хотя я не уверен, что это именно тот кусок кода)
/engine/includes/inc/lib_admin.php:264
foreach ($mysql->select("select * from ".prefix."_comments where post=".$nrow['id']) as $crow) {
..=>понял, что не тот.
/engine/plugins/comments/comments.php:32
foreach ($mysql->select("select * from ".prefix."_comments where post='".$newsID."' order by id") as $crow) {
/engine/plugins/uprofile/uprofile.php, 95ая строка:
'info' => secure_html($urow['info']),
замени на:
'info' => nl2br(secure_html($urow['info'])),
Файл /engine/plugins/uprofile/uprofile.php, ищешь:
if (!is_array($userROW)) {
msg(array("type" => "error", "text" => $lang['uprofile:msge_notlogged']));
return;
}
$currentUser = $userROW;
после этого вставляешь:
//Now checking if field 'editemail' is valid email address
if (!filter_var($_POST['editmail'], FILTER_VALIDATE_EMAIL)) {
msg(array("type"=>"error", "text"=>"Email is mandatory field! "));
return;
}
Будет вылазить:
Ошибка: Email is mandatory field!
На днях увидел ngCms (последний night build) (за что отдельное спасибо beliy) - хотелось бы отписать о замечаниях.
Первое.
Скуля в админке - это фейл. Хотя из админки есть возможность бэкапить БД и таким образом иметь полный доступ к ней, она может нехило помочь в заливке шелла (особенно, если ngcms работает от юзера root или любого другого mysql юзера с правами на запись файлов). Например, таким запросом заливается скрипт, выполняющий phpinfo:
/ngcms/engine/admin.php?mod=news&action=edit&id=1' UNION SELECT 1,2,3,4,5,6,7,8,9,'<?php phpinfo(); ?>',11 INTO OUTFILE '/var/www/ngcms/uploads/files/222.php' -- '
Сразу успокою, что использовать ее можно только с правами админа (для заливки шелла - только с определенными правами юзера бд), но если у вас утащат базу, то все плохо.
Как решение (для пользователей) - хотя бы с помощью .htaccess запретить выполнение скриптов в директории uploads, с правами на остальные директории быть внимательнее.
Второе.
Редактирование шаблонов. Ну это вообще просто о***ть. Переходим по адресу:
/ngcms/engine/admin.php?mod=templates&action=edit&filename=index.php&where=site&theme=../&skin=
И... редактируем index.php. Тот самый, что в корне /ngcms/. Разработчики, прикрутите фильтрацию слэшей и лишних точек, а так же прослеживайте, чтобы расширение имени шаблона было строго ".tpl".
Третье. Не столь значительное.
Пароли хранятся в базе в md5(md5($password)). Не кажется, что слабовато? Особенно после недавних скандалов с утечек паролей с last.fm и linkedin. Сейчас рекомендуют использовать bcrypt. Ну и хотя бы использовать соль.
Ну и еще, в некоторых местах в админке, если GET параметр, например, id=1, изменить на id[]=1, выскочит ошибка БД.
Пока что все. Буду дополнять по мере нахождения уязвимостей.
p.s. извините, возможно написал немного агрессивно.