Вы не зашли.
Лучше тогда уж писать систему "Вопрос - Ответ", как в новом DLE:
Не в сети
За проверку вопрос-ответ я тоже дам 300 р.:)
Тех. подержка Vbulletin √ <-- Отзывы
Не в сети
Открываем: auth_basic.php
Находим:
array_push($params, array('name' => 'email', title => $lang['auth_email'], 'descr' => $lang['auth_email_descr'],'type' => 'input'));
После добавляем:
array_push($params, array('name' => 'who_bot', title => 'Если не бот сними галочку:', 'descr' => '','type' => 'checkbox'));
Находим:
// Preprocess login
if (strlen($values['login'])<3) {
// Слишком короткий логин
$msg = $lang['auth_login_short'];
return 0;
}
После добавляем:
if(isset($values['who_bot']) && !empty($values['who_bot']))
{
// Дополнительная защита от ботов
$msg = 'Ботам регистрация запрещена';
return 0;
}
Открываем cmodules.php
Находим:
if ($param['type'] == 'text') {
$tvars['vars']['input'] = '<textarea name="'.$param['name'].'" title="'.$param['title'].'" '.$param['html_flags'].'>'.secure_html($param['value']).'</textarea>';
} else if ($param['type'] == 'input') {
$tvars['vars']['input'] = '<input name="'.$param['name'].'" type="text" title="'.$param['title'].'" '.$param['html_flags'].' value="'.secure_html($param['value']).'"/>';
} else if (($param['type'] == 'password')||($param['type'] == 'hidden')) {
$tvars['vars']['input'] = '<input name="'.$param['name'].'" type="'.$param['type'].'" title="'.$param['title'].'" '.$param['html_flags'].' value="'.secure_html($param['value']).'"/>';
} else if ($param['type'] == 'select') {
$tvars['vars']['input'] = '<select name="'.$param['name'].'" title="'.$param['title'].'" '.$param['html_flags'].'>';
foreach ($param['values'] as $oid => $oval) {
$tvars['vars']['input'].= '<option value="'.$oid.'"'.($param['value']==$oid?' selected':'').'>'.$oval.'</option>';
}
$tvars['vars']['input'].='</select>';
} else if ($param['type'] = 'manual') {
$tvars['vars']['input'] = $param['manual'];
}
Меням на:
if ($param['type'] == 'text') {
$tvars['vars']['input'] = '<textarea name="'.$param['name'].'" title="'.$param['title'].'" '.$param['html_flags'].'>'.secure_html($param['value']).'</textarea>';
} else if ($param['type'] == 'input') {
$tvars['vars']['input'] = '<input name="'.$param['name'].'" type="text" title="'.$param['title'].'" '.$param['html_flags'].' value="'.secure_html($param['value']).'"/>';
} else if ($param['type'] == 'checkbox') {
$tvars['vars']['input'] = '<input name="'.$param['name'].'" type="checkbox" title="'.$param['title'].'" '.$param['html_flags'].' value="1" checked="checked"/>';
} else if (($param['type'] == 'password')||($param['type'] == 'hidden')) {
$tvars['vars']['input'] = '<input name="'.$param['name'].'" type="'.$param['type'].'" title="'.$param['title'].'" '.$param['html_flags'].' value="'.secure_html($param['value']).'"/>';
} else if ($param['type'] == 'select') {
$tvars['vars']['input'] = '<select name="'.$param['name'].'" title="'.$param['title'].'" '.$param['html_flags'].'>';
foreach ($param['values'] as $oid => $oval) {
$tvars['vars']['input'].= '<option value="'.$oid.'"'.($param['value']==$oid?' selected':'').'>'.$oval.'</option>';
}
$tvars['vars']['input'].='</select>';
} else if ($param['type'] = 'manual') {
$tvars['vars']['input'] = $param['manual'];
}
И всё...
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Wolverine, Всё может быть, но мне лично помогло на своем форуме от этого спама...
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Применил - работает, но опять появилась хренотень с письмами. Доходят только на гугловские ящики. Подобное у меня уже было http://ngcms.ru/forum/viewtopic.php?id=1790, тогда вы мне не слабо помогли, сам в коде дуб-дубом. Может подскажите в чём дело, в моём "сложном случае")
Не в сети
Burelom, А у хостеров спрашивал?
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Так ответ примерно тот же: "Аосмотрите дамп почтового запроса в скриптах при отправке:
Есть обязательное условие: поле FROM должно указыввать на почтовый
ящик который реально создан в нашей почтовой системе (т.е. Вы
завели ящик у нас и в поле from указываете его)"
А что я там модернизирую мои проблемы(( Проблема появилась после изменений описанных выше, при изменениях в auth_basic.php, чтот видимо затронуло из прошлых изменений. Хреново хостинг 1 gb дружит с ng-почтой, в новой версии почта работает тоже только после изменения auth_basic.php, как советовали в прошлой ветке. С другими движками всё ок.
Не в сети
Эти изменения никак не влияют на отправку почты...
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Burelom, Скинь мне в личку адрес сайта, попробую сам у тебя зарегистрироваться
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Не в сети
Хак работает отлично, а вот с функцией sendEmailMessage (auth_basic) в 9.3 лучше не стало, не работает на хостинге 1gb. Попробовал так: http://ngcms.ru/forum/viewtopic.php?id=1790, видимо что-то изменили в плагине, метод уже не работает.
Не в сети
ROZARD, прикреплённый auth_basic.php (личка) хорошо работает без хака, с хаком пепец. Плагин взял со старого сайта (0.9.2), изменения в нём сделаны по советам из соседней ветки. Поэтому и подумал, что в 0.9.3 что-то поменяли. Понимаю, что у других работает, не все же сидят на 1 gb.
<?php
// Protect against hack attempts
if (!defined('NGCMS')) die ('HAL');
//
// Прописываем свой модуль
//
global $AUTH_METHOD;
global $AUTH_CAPABILITIES;
global $config;
class auth_basic {
// Осуществить вход
// $username = логин
// $password = пароль
// $auto_scan = если 1, то функция сама должна найти нужные параметры среди POST'ов
function login($auto_scan = 1, $username = '', $password = '') {
global $mysql;
if ($auto_scan) {
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
}
$password = EncodePassword($password);
$sql = "select * from ".uprefix."_users where name = ".db_squote($username)." and pass=".db_squote($password);
$row = $mysql->record($sql);
// Проверяем нужна ли активация
if ($row['activation']) {
return 'ERR:NEED.ACTIVATE';
}
if ($row) { return $row; }
return '';
}
//
// Сохранить в БД информацию о том, что пользователь авторизовался
// $dbrow = строка из нашей таблицы пользователей
function save_auth($dbrow) {
global $config, $mysql, $ip;
// создаём random cookie
$auth_cookie = md5((isset($config['crypto_salt'])?$config['crypto_salt']:'').uniqid(rand(),1));
$query = "update ".uprefix."_users set last = ".db_squote(time()).", ip=".db_squote($ip).", authcookie = ".db_squote($auth_cookie)." where id=".db_squote($dbrow['id']);
$mysql->query($query);
// Вставить юзеру куку
@setcookie('zz_auth', $auth_cookie, ($config['remember']?(time() + 3600 * 24 * 365):0), '/');
return 1;
}
//
// Проверить авторизацию пользователя
function check_auth() {
global $config, $mysql, $ip;
$auth_cookie = isset($_COOKIE['zz_auth'])?$_COOKIE['zz_auth']:'';
if (!$auth_cookie) { return ''; }
$query = "select * from ".uprefix."_users where authcookie = ".db_squote($auth_cookie)." limit 1";
$row = $mysql->record($query);
// Check for "IPLOCK" protection
if (pluginGetVariable('auth_basic', 'iplock') && ($ip != $row['ip'])) {
return '';
}
// Auth done
if ($row['name']) {
// Check if we need to update last visit field
if ((pluginGetVariable('auth_basic', 'lastupdate') > 0) && ((time() - $row['last']) > pluginGetVariable('auth_basic', 'lastupdate'))) {
$query = "update ".uprefix."_users set last = ".db_squote(time()).", ip=".db_squote($ip)." where id=".db_squote($row['id']);
$mysql->query($query);
}
return $row;
}
return '';
}
//
// Отменить авторизацию
function drop_auth() {
global $config, $mysql, $userROW;
$auth_cookie = $_COOKIE['zz_auth'];
if (!$auth_cookie) { return; }
$mysql->query("update ".uprefix."_users set authcookie = '' where id=".db_squote($userROW['id']));
@setcookie('zz_auth', '', time() - 3600 * 24 * 365, '/');
return;
}
//
// Вернуть массив параметров, необходимых при регистрации
function get_reg_params() {
global $config, $lang;
$params = array();
LoadPluginLang('auth_basic', 'auth','','auth');
array_push($params, array('name' => 'login', title => $lang['auth_login'], 'descr' => $lang['auth_login_descr'],'type' => 'input'));
if ($config['register_type'] >= 3) {
array_push($params, array('name' => 'password', title => $lang['auth_pass'], 'descr' => $lang['auth_pass_descr'], 'type' => 'password'));
array_push($params, array('name' => 'password2', title => $lang['auth_pass2'], 'descr' => $lang['auth_pass2_descr'],'type' => 'password'));
}
array_push($params, array('name' => 'email', title => $lang['auth_email'], 'descr' => $lang['auth_email_descr'],'type' => 'input'));
array_push($params, array('name' => 'who_bot', title => 'Если не бот сними галочку:', 'descr' => '','type' => 'checkbox'));
return $params;
}
//
// Провести регистрацию
// params = параметры полученные из get_reg_params()
// values = значения для вышеуказанных параметрах
// msg = сообщение об ошибке
// Возвращаемые значения:
// 0 - ошибка
// 1 - всё ok
function register(&$params, $values, &$msg) {
global $config, $mysql, $lang, $tpl;
LoadPluginLang('auth_basic', 'auth','','auth');
$error = 0;
$values['login'] = trim($values['login']);
// Preprocess login
if (strlen($values['login'])<3) {
// Слишком короткий логин
$msg = $lang['auth_login_short'];
return 0;
}
if(isset($values['who_bot']) && !empty($values['who_bot']))
{
// Дополнительная защита от ботов
$msg = 'Ботам регистрация запрещена';
return 0;
}
// Проверяем логин на запрещенные символы
$csError = false;
switch (pluginGetVariable('auth_basic', 'regcharset')) {
case 0:
if (!preg_match('#^[A-Za-z0-9\.\_\-]+$#s', $values['login'])) {
$csError = true;
}
break;
case 1:
if (!preg_match('#^[А-Яа-яёЁ0-9\.\_\-]+$#s', $values['login'])) {
$csError = true;
}
break;
case 2:
if (!preg_match('#^[А-Яа-яёЁA-Za-z0-9\.\_\-]+$#s', $values['login'])) {
print "CASE2-err [".$values['login']."]";
$csError = true;
}
break;
case 3:
if (!preg_match('#^[\x21-\x7e\xc0-\xffёЁ]+$#s', $values['login'])) {
$csError = true;
}
break;
case 4:
break;
}
if (preg_match('/[&<>\\"'."'".']/', $values['login']) || $csError) {
// Запрещенные HTML символы
$msg = $lang['auth_login_html'];
return 0;
}
if ($config['register_type'] >= 3) {
if (strlen($values['password']) < 3) {
// Слишком короткий пароль
$msg = $lang['auth_pass_short'];
return 0;
} else if ($values['password'] != $values['password2']) {
// Несовпадение паролей
$msg = $lang['auth_pass_diff'];
return 0;
}
}
if ((strlen($values['email']) > 70) || (!preg_match("/^[\.A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $values['email']))) {
// Неверный email
$msg = $lang['auth_email_wrong'];
return 0;
}
$row = $mysql->record("select * from ".uprefix."_users where lower(name)=".db_squote(strtolower($values['login']))." or mail=".db_squote($values['email']));
if (is_array($row)) {
// Дублирование логина/email'а
if (strtolower($row['mail']) == strtolower($values['email'])) {
// email dup
$msg = $lang['auth_email_dup'];
return 0;
}
// Если не мыло, то логин
$msg = $lang['auth_login_dup'];
return 0;
}
// Всё в порядке, регим
$add_time = time() + ($config['date_adjust'] * 60);
// Статус пользователя по умолчанию
$regstatus = intval(pluginGetVariable('auth_basic','regstatus'));
if (($regstatus < 1)||($regstatus > 4))
$regstatus = 4;
// Определяем действия в зависимости от типа регистрации
switch ($config['register_type']) {
// 0 - Мгновенная [автогенерация пароля, без email нотификации]
case 0:
$newpassword = MakeRandomPassword();
$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
msg(array(
"text" => $lang['msgo_registered'],
"info" => str_replace(array('{login}', '{password}'), array($values['login'], $newpassword), $lang['auth_reg.success0'])
));
break;
// 1 - Простая [автогенерация пароля, с email нотификацией]
case 1:
$newpassword = MakeRandomPassword();
$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
$tvars['vars'] = array( 'login' => $values['login'],
'home' => home,
'password' => $newpassword);
$tvars['regx'] = array(
'#\[activation\].+?\[\/activation]#is' => '',
);
$tpl -> template('register', GetPluginLangDir('auth_basic'));
$tpl -> vars('register', $tvars);
$msg = $tpl->show('register');
sendEmailMessage(
$values['email'],
$lang['letter_title'],
$msg,
'html',
'***@***'
);
msg(array(
"text" => $lang['msgo_registered'],
"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $newpassword, $values['email']), $lang['auth_reg.success1'])
));
break;
// 2 - С подтверждением [автогенерация пароля, пароль отправляется на email адрес и не показывается в админке]
case 2:
$newpassword = MakeRandomPassword();
$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
$userid = $mysql->record('select LAST_INSERT_ID() as id');
$link = generatePluginLink('core', 'activation', array('userid' => $userid['id'], 'code' => $actcode), array(), false, true);
$actlink = '<a href="'.$link.'">'.$link.'</a>';
$tvars['vars'] = array( 'login' => $values['login'],
'home' => home,
'password' => $newpassword);
$tvars['regx'] = array(
'#\[activation\].+?\[\/activation]#is' => '',
);
$tpl -> template('register', GetPluginLangDir('auth_basic'));
$tpl -> vars('register', $tvars);
$msg = $tpl->show('register');
sendEmailMessage(
$values['email'],
$lang['letter_title'],
$msg,
'html',
'***@***'
);
msg(array(
"text" => $lang['msgo_registered'],
"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $newpassword, $values['email']), $lang['auth_reg.success2'])
));
break;
// 3 - Ручная с нотификацией [ручная генерация пароля, email нотификация]
case 3:
$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($values['password'])).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
$tvars['vars'] = array( 'login' => $values['login'],
'home' => home,
'password' => $values['password']);
$tvars['regx'] = array(
'#\[activation\].+?\[\/activation]#is' => '',
);
$tpl -> template('register', GetPluginLangDir('auth_basic'));
$tpl -> vars('register', $tvars);
$msg = $tpl->show('register');
sendEmailMessage(
$values['email'],
$lang['letter_title'],
$msg,
'html',
'***@***'
);
msg(array(
"text" => $lang['msgo_registered'],
"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $values['password'], $values['email']), $lang['auth_reg.success3'])
));
break;
// 4 - Ручная с подтверждением [ручная генерация пароля, подтверждение email адреса]
case 4:
$actcode = MakeRandomPassword();
$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last, activation) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($values['password'])).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '', ".db_squote($actcode).")");
$userid = $mysql->record('select LAST_INSERT_ID() as id');
$link = generatePluginLink('core', 'activation', array('userid' => $userid['id'], 'code' => $actcode), array(), false, true);
$actlink = '<a href="'.$link.'">'.$link.'</a>';
$tvars['vars'] = array( 'login' => $values['login'],
'home' => home,
'password' => $values['password'],
'activate_url' => $actlink);
$tvars['regx'] = array(
'#\[activation\](.+?)\[\/activation]#is' => '$1',
);
$tpl -> template('register', GetPluginLangDir('auth_basic'));
$tpl -> vars('register', $tvars);
$msg = $tpl->show('register');
sendEmailMessage(
$values['email'],
$lang['letter_title'],
$msg,
'html',
'***@***'
);
msg(array(
"text" => $lang['msgo_registered'],
"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $values['password'], $values['email']), $lang['auth_reg.success4'])
));
//print "<pre>".var_export($lang, true)."</pre>";
}
return 1;
}
//
// Вернуть массив параметров, необходимых для восстановления пароля
function get_restorepw_params() {
global $config, $lang;
$params = array();
LoadPluginLang('auth_basic', 'auth','','auth');
$mode = pluginGetVariable('auth_basic','restorepw');
if (!$mode) {
return false;
//array_push($params, array('text' => $lang['auth_norestore']));
//return $params;
}
array_push($params, array('text' => $lang['auth_restore_'.$mode]));
if ($mode != 'email') {
array_push($params, array('name' => 'login', title => $lang['auth_login'],'type' => 'input'));
}
if ($mode != 'login') {
array_push($params, array('name' => 'email', title => $lang['auth_email'],'type' => 'input'));
}
return $params;
}
//
// Восстановить пароль
function restorepw(&$params, $values, &$msg) {
global $config, $mysql, $lang, $tpl;
$error = 0;
$values['login'] = trim($values['login']);
$values['email'] = trim($values['email']);
LoadPluginLang('auth_basic', 'auth','','auth');
$mode = pluginGetVariable('auth_basic','restorepw');
if (!$mode) {
$msg = $lang['auth_norestore'];
return 0;
}
$px = array();
if ($mode != 'email') {
if (!$values['login']) {
$msg = $lang['auth_login_require'];
return 0;
}
array_push($px, "name = ".db_squote($values['login']));
}
if ($mode != 'login') {
if (!$values['email']) {
$msg = $lang['auth_email_require'];
return 0;
}
array_push($px, "mail = ".db_squote($values['email']));
}
$query = "select * from ".uprefix."_users where ".implode(' and ',$px);
$row = $mysql->record($query);
if (is_array($row)) {
// Нашли юзера
$newpassword = MakeRandomPassword();
$mysql->query("UPDATE ".uprefix."_users SET newpw=".db_squote(EncodePassword($newpassword))." WHERE id=".$row['id']);
$tvars['vars'] = array( 'login' => $row['name'],
'home' => home,
'newpw' => $newpassword);
$tvars['vars']['pwurl'] = generatePluginLink('core', 'lostpassword', array('userid' => $row['id'], 'code' => EncodePassword($newpassword)), array(), false, true);
$tpl -> template('restorepw', GetPluginLangDir('auth_basic'));
$tpl -> vars('restorepw', $tvars);
sendEmailMessage($row['mail'],$lang['auth_mail_subj'],$tpl->show('restorepw'), false, '***@***');
msg(array("text" => $lang['msgo_sent']));
return 1;
} else {
$msg = $lang['auth_nouser'];
return 0;
}
}
//
// Подтверждение восстановления пароля
//
function confirm_restorepw(&$msg, $reqid = NULL, $reqsecret = NULL) {
global $config, $mysql, $lang, $tpl;
LoadPluginLang('auth_basic', 'auth','','auth');
$row = $mysql->record("select * from ".uprefix."_users where id = ".db_squote($reqid));
if (is_array($row)) {
if ($reqsecret == $row['newpw']) {
// OK !!!
$msg = $lang['auth_newpw_ok'];
$mysql->query('update '.uprefix.'_users set pass=newpw where id = '.db_squote($reqid));
return 1;
}
}
$msg = $lang['auth_newpw_fail'];
return 0;
}
}
$AUTH_METHOD['basic'] = new auth_basic;
$AUTH_CAPABILITIES['basic'] = array('login' => '1', 'db' => '1');
if (pluginGetVariable('auth_basic','en_dbprefix')) {
$config['uprefix'] = pluginGetVariable('auth_basic','dbprefix');
}
Изменено ROZARD (2011-11-21 00:09:39)
Не в сети
Burelom, Тот что в личке вообще странный и работать он не будет, но зато хак есть от ботов:
sendEmailMessage(
$values['email'],
$lang['letter_title'],
$msg,
false,
false,
'html'
);
sendEmailMessage(
$values['email'],
$lang['letter_title'],
$msg,
'html'
);
В приведенном тобой варианте всё нормально, но хака нет...
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Как нет?
array_push($params, array('name' => 'who_bot', title => 'Если не бот сними галочку:', 'descr' => '','type' => 'checkbox'));
и
if(isset($values['who_bot']) && !empty($values['who_bot']))
{
// Дополнительная защита от ботов
$msg = 'Ботам регистрация запрещена';
return 0;
}
Всё на местах, этот вариант сейчас на сайте (родная почта прописана вместо звёздочек)
Не в сети
Burelom, Да не может не работать в таком случае...
Хорошо бы взглянуть весь архив с изменениями без звездочек.
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Отбой) Дело было не в бобине)) У хостера неполадки с почтовым сервером, вопрос решили, письма стали доходить. Отрубили сервер после установки хака, зараза) столько времени потерял и вам голову заморочил, пойду убьюсь о стену и хостера за одно))) Спасибо!
Не в сети