Flat |
Отправлено: 26 января 2019 — 13:27
|
Full Member
Покинул форум
Сообщений всего: 187
Дата рег-ции: Май 2018
Откуда: Красноярский край
Репутация: 14
|
Yamaliya пишет:Сделали что-то толковое? Покажите нам, оценим.
Просто поболтать зашли?
Yamaliya , честно говоря, я зашёл чтобы напомнить о существовании других, более дружелюбных пользователям путей.
Что касается того, что сделано, то долго вообще ничего не программировал в связи с психологическими проблемами, отсутствием мотивации и пр. Сейчас пришёл в норму и продолжаю делать форум практически с нуля. Регистрацию практически сделал. Точка входа через индексный файл. Много функций уже сделал. Общая структура форума определилась. Сделал активацию через мыло для подтверждения, но выкинул этот уже готовый модуль, оставив только регистрацию. На это есть определённые причины. Позже обьясню подробней. Сейчас всё идёт как по маслу. Раз уж взялся за гуж не говори, что не дюж.
Модули подключаются через общий список, поэтому злоупотреблений не будет.
Очень долго тестирование занимает, зато теперь вся регистрация, работает как часики. Файлы забаненых логинов, запрещённых слов при регистрации, статистики коонференции заполняются, а если какой-то служебный файл потеряется, то скрипт автоматически его создаёт на прежнем месте, так что админу облегчение. Ещё немного и практически готовое ядро будет, где можно будет создавать сообщения.
Скрытое поле у меня сделано так(можно переделать):
в шаблоне прописывается поле для ввода, в данном случае второго поля для пароля:
CODE:<tr>
<td class="profilleft">
<b>
Пароль
</b><br />
<span class="desc">
Введите пароль. Имейте ввиду, что все пароли чувствительны к регистру. Можно использовать только такие символы: от a до z, от A до Z, и цифры. Минимум <b>8</b>, максимум <b>30</b> символов!
</span><br><br>
<input type="text" size="20" name="password1" maxlength="30">
</td>
</tr>
<tr id="hd">
<td class="profilleft">
<span class="desc">
Подтвердите пароль.
</span><br><br>
<input type="text" size="20" name="password2" maxlength="30">
</td>
</tr>
В файле css делаем запись:
CODE:#hd { display: none; }
поэтому его не видно при регистрации.
зато видно боту.
В скрипте проверяем заполнено это поле или нет:
CODE:if(!empty($_POST['password2']))
exit('Access denied!');
если заполнено, то выходим из скрипта с сообщением, хотя это и не обязательно.
Yamaliya , сейчас выкладываь весь код смысла нет.
(Добавление)
Yamaliya , вот практически готовый рабочий модуль регистрации тысячу раз протестированный Привожу чтобы вы имели представление что такое мой собственный дилетантский код:
Регистрация (Отобразить)CODE:<?php
if (!defined('EXBB_OK')){die('Access denied!');}
function sibb_addMember()
{
global $Config, $NowTime, $Cookie, $Action, $User;
require_once(FUNCTIONS.'token.php');
require_once(FUNCTIONS.'to_lower.php');
require_once(FUNCTIONS.'translit.php');
require_once(FUNCTIONS.'set_cookie.php');
require_once(FUNCTIONS.'message.php');
if (!isset($_POST['addmem']) && $_POST['addmem']!='addmember')
exit('Access denied!');
$rg='Регистрация!';
if ($Config['reg_off'] === TRUE) { sibb_message($rg,'Извините, Вы не можете быть зарегистрированным! Администратор конференции временно запретил регистрацию новых пользователей!');}
if ($User['status']!='guest')sibb_message($rg,'
Только незарегистрированные пользователи могут проходить процедуру регистрации!');
if (!isset($_POST) || !isset($_POST['login']) || !isset($_POST['password1']) || !isset($_POST['password2']))
exit('Access denied!');
if(empty($_POST['password1']))
sibb_message($rg,'Не введён пароль! Пожалуйста введите пароль!');
if(!empty($_POST['password2']))
exit('Access denied!');
if(strlen($_POST['password1'])<8 || strlen($_POST['password1']>30)){sibb_message($rg,' Длина вашего пароля меньше 8-и или больше 30 символов! Пожалуйста введите пароль в заданном диапазоне!');}
if(preg_match('%[^0-9a-zA-Z]%', $_POST['password1'])){sibb_message($rg,'В введённом пароле присутствуют недопустимые символы! Пожалуйста введите правильный набор символов пароля!');}
if(empty($_POST['login']))
sibb_message($rg,'Не введено имя! Пожалуйста введите имя!');
$_POST['login'] = preg_replace( "/\s{1,}/", " ", $_POST['login']);
if(strlen($_POST['login'])<3 || strlen($_POST['login']>80)){sibb_message($rg,' Длина вашего имени меньше 3-х или больше 80 символов! Пожалуйста введите имя в заданном диапазоне!');}
if(preg_match('%[^0-9a-zA-Z_\- йцукенгшщзхъэждлорпавыфячсмитьбюёЙЦУКЕНГШЩЗХЪЭЖДЛОРПАВЫФЯЧСМИТЬБЮЁ]%', $_POST['login'])){sibb_message($rg,'В введённом имени присутствуют недопустимые символы! Пожалуйста введите правильный набор символов!');}
$f_ru=strpbrk($_POST['login'], 'йцукенгшщзхъэждлорпавыфячсмитьбюёЙЦУКЕНГШЩЗХЪЭЖДЛОРПАВЫФЯЧСМИТЬБЮЁ');
$f_lt=strpbrk($_POST['login'], 'qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM');
if(!$Config['ru_nicks'] && $f_ru!=false)
{
sibb_message($rg,'Русские ники отключены на коференции!');
}
if($f_ru!=false && $f_lt!=false)
{
sibb_message($rg,'Имя должно быть либо только из русских, либо только из английских букв');
}
$fIsRu=false;
if($f_ru!=false && $f_lt==false)
{
$fIsRu=true;
}
if(!file_exists(BADREGWORDS_FILE))
{
sibb_saveArr(array(), BADREGWORDS_FILE);
}
else
{
$badWords=sibb_getArr(BADREGWORDS_FILE);
$l=count($badWords);
for($i=0; $i<$l; ++$i)
{
if(strcmp(sibb_strToLower($badWords[$i]), $_POST['login'])==0)
{
sibb_message($rg,'Введённое Вами имя совпало с одним из запрещённых слов! Пожалуйста введите другой вариант имени!');
}
}
}
if($fIsRu)
$login=sibb_translit($_POST['login']);
else
$login=$_POST['login'];
if(file_exists(USERS.'member_'.$login))
{
sibb_message($rg,'Введённое Вами имя совпало с одним из существующих имён! Пожалуйста введите другой вариант имени!');
}
if(!file_exists(BANLOGINS_FILE))
{
sibb_saveArr(array(), BANLOGINS_FILE);
}
else
{
$bannedLogins=sibb_getArr(BANLOGINS_FILE);
$l=count($bannedLogins);
for($i=0; $i<$l; ++$i)
{
if(strcmp($bannedLogins[$i], $_POST['login'])==0)
{
sibb_message($rg,'Введённое Вами имя совпало с одним из забаненных имён! Пожалуйста введите другой вариант имени!');
}
}
unset($bannedLogins);
}
$user = array();
$user[0]=$_POST['login']; $user[1]=md5($_POST['password1']); $user[2]=0; $user[3]=2; $user[4]='no'; $user[5]=0; $user[6]=0; $user[7]=time(); $user[8]=0; $user[9]=0; $user[10]='no'; $user[11]='no'; $user[12]='no'; $user[13]='no'; $user[14]=0; $user[15]=1; $user[16]=0; $user[17]=0; $user[18]=0; $user[19]=1; $user[20]=0; $user[21]=0; $user[22]='no'; $user[23]=0; $user[24]=0; $user[25]=0; $user[26]=0; $user[27]=0; $user[28]=1; $user[29]=1; $user[30]=1; $user[31]=1; $user[32]=1; $user[33]=0; $user[34]=0; $user[35]=1; $user[36]='no'; $user[37]='no';
if (!mkdir(USERS.'member_'.$login))
{
die('Ошибка! Не удалось создать директорию...');
}
sibb_saveArr($user, USERS.'member_'.$login.'/user_profile.php');
$token=sibb_getToken();
sibb_saveArr(array(0=>$token, 1=>$NowTime, 2=>$Action, 3=>0, 4=>0, 5=>0), USERS.'member_'.$login.'/user_stat.php');
sibb_setCookie($_POST['login'].'|'.$token, 8760);
$stat=sibb_getArr(BOARDSTATS_FILE);
$stat[3] = $stat[3]+1;
$stat[2] = $_POST['login'];
sibb_saveArr($stat, BOARDSTATS_FILE);
if ($Config['newusernotify'])
{
//здесь сообщаем админу о новом юзере в личку(ТОЛЬКО В ЛИЧКУ!!!)
}
usleep(500000);
sibb_message($rg,'Благодарим Вас за регистрацию на нашем форуме!', $Config['boardurl'].'/index.php');
}
sibb_addMember();
?> (Отредактировано автором: 26 января 2019 — 13:27) |
|
|
Yamaliya |
Отправлено: 26 января 2019 — 14:24
|
Super Member
Покинул форум
Сообщений всего: 662
Дата рег-ции: Авг. 2012
Откуда: Ямал
Репутация: 20
|
Flat , Flat пишет:вот практически готовый рабочий модуль
Словосочетание бессмысленно. Модуль либо готовый и рабочий, либо в стадии доработки.
Flat пишет:тысячу раз протестированный Кем? Вами? На каком форуме? Дайте попробую протестировать!
Есть без преувеличения протестированные моды, которые в общем доступе, и без излишнего зазнайства, и протестированы действительно тысячи раз!Flat пишет:сейчас выкладываь весь код смысла нет
Мне лучше замолчать и не вступать с вами в перепалку, ничего хорошего из этого не выйдет. Просто буду игнорировать ваши посты. |
|
|
Sigurni |
Отправлено: 7 февраля 2019 — 13:33
|
Newbie
Покинул форум
Сообщений всего: 11
Дата рег-ции: Окт. 2018
Репутация: -3
|
Flat пишет:Сейчас пришёл в норму и продолжаю делать форум практически с нуля.
Сколько раз вы его уже делаете с нуля? И всегда вот вроде бы уже "почти готово всё", "многое сделано", "тысячу раз протестировано", а потом опять с нуля...
Полностью поддерживаю Yamaliya, вы либо уже выложите здесь хоть что-то реально рабочее, либо не дразните почти в каждой теме пользователей.
Flat пишет:В файле css делаем запись:
CODE:#hd { display: none; }
поэтому его не видно при регистрации.
зато видно боту.
Это защитит только от очень тупых ботов а-ля Xrumer по состоянию на 2012 год (к слову, более поздние его версии уже не заполняют такие поля). А новые решения, работающие на базе Selenium WebDriver, phantomjs, puppeteer прекрасно могут определять видимость полей.
З.Ы. Стиль кода в спойлере "Регистрация" просто жуть. Все файлы подключаются вручную (причём зачем-то ещё и в теле функции), а про autoload, видимо, автор не слышал. Глобальные переменные, судя по этому куску кода, по итогу в движке будут повсюду... Даже в 10-летних старых версиях ExBB нет такой дичи, как прямая работа с суперглобальными массивами входных данных ($_GET, $_POST) в контроллерах и уж тем более функциях.(Отредактировано автором: 7 февраля 2019 — 13:35) |
|
|
Flat |
Отправлено: 7 февраля 2019 — 14:50
|
Full Member
Покинул форум
Сообщений всего: 187
Дата рег-ции: Май 2018
Откуда: Красноярский край
Репутация: 14
|
Sigurni пишет:Сколько раз вы его уже делаете с нуля? И всегда вот вроде бы уже "почти готово всё", "многое сделано", "тысячу раз протестировано", а потом опять с нуля...
Sigurni
С нуля это для души. Делать это буду долго. А вот для работы уже сейчас, уже некоторое время переделываю ExBB FM 1.0 RC1...
Зачем переделываю? Потому что, как я уже писал, во-первых, переделка ExBB на ооп была ошибкой, которая практически похоронила движок. Если раньше им могли заниматься непроффессиональные программисты-любители, то сейчас их просто не осталось совсем. А проффессионалы с этим вообще связываться НИКОГДА не будут..
Хотели блеснуть своим уровнем знаний? Блеснули? Молодцы!..
Sigurni пишет:Полностью поддерживаю Yamaliya, вы либо уже выложите здесь хоть что-то реально рабочее, либо не дразните почти в каждой теме пользователей.
Вскоре, если всё пойдёт нормально, будет готовый движок. Очищенный от какого то ни было ооп.
От ООП я уже его очистил! Все функции получили префиксы и новые имена(очень похожие на старые)).
Темплейт тоже переделан полностью. Сейчас идёт очистка от нотисов. Когда этот этап будет закончен и форум будет работать(он уже и сейчас выводит главную страницу без нотисов и полностью сделан инсталлятор), то начнётся новый этап переделки.
Первое что надо сделать, это создать одну папку со всеми данными для лёгкого бэкапа! Об этом тут кто только не говорил!
Затем сделать подключение модулей через одну точку входа, через список модулей!
Ну и вменяемую легко читаемую базу. Пожалуй на первом этапе и всё - уже можно выложить готовый вариант.
Уже сейчас можно вдохнуть свободно! Уже нет этого уродства в скриптах и можно начинать жить..
Я перелопатил этот движок вдоль и поперёк.. И по ходу пьесы нашёл много недочётов..
Например, один такой недочёт есть в функции $fm->_GetVars().
В строчках:
CODE:if (is_array($_GET))
и
CODE:if (is_array($_POST))
Условия ВСЕГДА возвращают TRUE!
Правильно:
Настоятельно прошу заменить у себя.
Sigurni пишет:Это защитит только от очень тупых ботов а-ля Xrumer по состоянию на 2012 год (к слову, более поздние его версии уже не заполняют такие поля). А новые решения, работающие на базе Selenium WebDriver, phantomjs, puppeteer прекрасно могут определять видимость полей.
Принято к сведению.
Sigurni пишет:Стиль кода в спойлере "Регистрация" просто жуть. Все файлы подключаются вручную (причём зачем-то ещё и в теле функции), а про autoload, видимо, автор не слышал.
Я уже этот модуль переделал. Что там вам в стиле не нравится? Файлы подключаются не вручную, а через специальные функции. О каком автолоаде вы пишете?
Sigurni пишет:Глобальные переменные, судя по этому куску кода, по итогу в движке будут повсюду... Даже в 10-летних старых версиях ExBB нет такой дичи, как прямая работа с суперглобальными массивами входных данных ($_GET, $_POST) в контроллерах и уж тем более функциях.
А сейчас разве не так? Класс-то синглтон! Там везде эмуляция глобальных идёт! Так зачем извращаться? Проще и намного оставить глобальные глобальными.
Так было с самого начала задумано. Почему отказались и пошли своим путём? Надо было с самого начала совершенствовать данную концепцию простого и понятного движка! А усложнили в угоду коммерции, имхо.. Я, просто, возвращаю всё на свои рельсы..(Отредактировано автором: 7 февраля 2019 — 15:01) |
|
|
1Bot |
Отправлено: 8 февраля 2019 — 15:13
|
Super Member
Покинул форум
Сообщений всего: 773
Дата рег-ции: Апр. 2009
Откуда: Днепропетровск
Репутация: 69
|
Flat пишет:В строчках:
CODE:
if (is_array($_GET))
и
CODE:
if (is_array($_POST))
Условия ВСЕГДА возвращают TRUE!
Правильно:
CODE:
if (!empty($_GET))
Настоятельно прошу заменить у себя.
Если это не было изменено каким-либо образом, например
CODE:$_POST = 'not array';
Обычно в целях защиты обнуляют пост данные, если например crfs-токен неправильный.(Отредактировано автором: 8 февраля 2019 — 15:19) |
|
|
|