VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Вечер добрый. Недавно мне была поставлена задача поднять внутренний форум в конторе. Собственно форум подняла благодаря интрукции с этого сайта (огромное спасибо за неё). Далее столкнулась со следующей проблемой: при регистрации необходимо контролировать введённые пользователем данные, а именно:
Логин - состоит только из латиницы
Пароль - должен содержать определённое количество цифр и определённое кол-во латинских знаков
Почта - мыло в определённом домене
Ввод капчи не обязателен
Собственно с PHP только недавно начала знакомиться. Для получения этих данных решила изменить файл Register.php, а именно добавить туда проверку. Поскольку сама немного знакома с Pascal/Delphi, то заметила некоторую схожость между Паскалем и PHP и действовать решила исходя из этих знаний. Для начала решила записать все значения в переменные. Имя и мыло получить удалось (($_POST['username']) и ($_POST['email'])), а вот пароль ($_POST['password']) почему-то отказался записываться в переменную (она оставалась пустой). Код вставляла после 232 строки (примерно). И соответственно из-за пустой переменной не могу работать с этим значением (а подходить к каждому и контролировать процесс регистрации тем более )
Ещё по незнанию возникла проблема с отключением капчи - не нашла как это сделать (искать именно это тут пока не пробовала)
большинство указанного контролируется из админки
если знакомы с регулярными выражениями, можно написать в настройке регулярку, по которой пользователи будут региться в соответствии с правилами регулярного выражения
капча тоже отключается в настройках
пароль и домен майла можно тоже проверить регулярным выражением прямо в коде
за создание пароля отвечает примерно следующий код:
PHP Code:
$pass = md5(md5($_POST['pass']) . $salt);
переменная $salt генерится в случайном порядке и состоит из трех случайных символов
@rysa
Простоузер
Join Date: Nov 2008
Posts: 8
Версия vB: 3.6.8
Reputation:
Novice 0
Репутация в разделе: 0
0
Quote:
Originally Posted by kerk
пароль и домен майла можно тоже проверить регулярным выражением прямо в коде
Я скачала программу для тренировки с регулярными выражениями
Quote:
Originally Posted by kerk
за создание пароля отвечает примерно следующий код:
А вот такого я не увидела
Quote:
Originally Posted by kerk
капча тоже отключается в настройках
Буду внимательнее искать
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,823
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20319
Репутация в разделе: 8468
2
у меня на компе нету версии 3.6.8, есть 3.6.10, там проверка введенных пользователем данных начинается примерно с 255 строки, код:
// check for missing fields
.............
и из файлов линейки 3.7.х
код проверки пароля, файл class_dm_user.php:
PHP Code:
function verify_password(&$password)
{
if (!($salt = $this->fetch_field('salt')))
{
$this->user['salt'] = $salt = $this->fetch_user_salt();
}
// generate the password
$password = $this->hash_password($password, $salt);
if (!defined('ALLOW_SAME_USERNAME_PASSWORD'))
{
// check if password is same as username; if so, set an error and return false
if ($password == md5(md5($this->fetch_field('username')) . $salt))
{
$this->error('sameusernamepass');
return false;
}
}
Или я не выспалась или мне просто не удаётся распарсить пароль. Переменная пустая
P.S.: Отключение капчи нашла
rysa добавил 25.11.2008 в 00:24
Если честно, то я вобще не нашла место, где вызывается функция verify_password . (сужу по синтаксису Паскаля). Эта функция упоминается ещё в файле с раширением XML, но в нём мне вобще ничего не понятно
Last edited by rysa : 11-25-2008 at 01:24 AM.
Reason: Добавлено сообщение
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,823
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20319
Репутация в разделе: 8468
0
пароль проверяется яваскриптом при отправке формы
кусок кода формы из шаблона:
У меня всё никак не получается побороть этот скрипт
Возможно я многое делаю не правильно, я проверяю переменную путём записи её в файл (переменные username и email записываются (равно как и все остальные)), а пароль не пишется никоим образом, куда бы я код не вставляла
Если подскажите способ проверки переменой другим образом, то тоже буду очень благодарна
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,823
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20319
Репутация в разделе: 8468
1
хм...
а зачем проверка с записью в файл?
достаточно вывести print или echo, что бы посмотреть, что же находится в переменной =)
после заполнения формы и вызова $_POST['do'] == 'addmember'
т.е после кода:
Оо зачем для внутреннего форума в конторе юзать VBulletin?
найдите в register.php
Quote:
if (empty($vbulletin->GPC['username'])
OR empty($vbulletin->GPC['email'])
OR empty($vbulletin->GPC['emailconfirm'])
OR ($vbulletin->GPC['coppauser'] AND empty($vbulletin->GPC['parentemail']))
OR (empty($vbulletin->GPC['password']) AND empty($vbulletin->GPC['password_md5']))
OR (empty($vbulletin->GPC['passwordconfirm']) AND empty($vbulletin->GPC['passwordconfirm_md5']))
и добавьте после
Quote:
OR (!preg_match('регулярное выражение для пароля', $vbulletin->GPC['password']))
@rysa
Простоузер
Join Date: Nov 2008
Posts: 8
Версия vB: 3.6.8
Reputation:
Novice 0
Репутация в разделе: 0
0
Расцеловала бы!
А я команду принт не читала - думала, что это для печати на принтере
Только вот хэш мне видимо не нужен - его проверить невозможно (если я правильно понимаю)
rysa добавил 25.11.2008 в 19:29
Quote:
Originally Posted by Byakuya
и добавьте после Цитата: OR (!preg_match('регулярное выражение для пароля', $vbulletin->GPC['password']))
Вот сейчас попробую. Спасибки
Last edited by rysa : 11-25-2008 at 08:29 PM.
Reason: Добавлено сообщение