Для этого нужно иметь эти тысячи адресов e-mail. На бесплатном почтовом сервере с заведением себе тысяч аккаунтов вряд-ли кто свяжется... На своем домене, но стороннем хостинге - тоже, потому как хостеры хоть и декларируют неограниченное количество адресов почты, но если поступит жалоба, что они использовались для спама, спамеру закроют аккаунт и деньги не вернут... Если у спамера свой сервер, тогда он конечно может без особых проблем гадить. Но от этого тоже можно защититься.
Валерия, плюс при вводе в действия ссылки активации, нужно чтобы твой сервер не обвинили в спаме... Если спамер создаст тысячи регистраций и твой сервер всем им разошлет активационные ссылки этим он уже навредит работе твоему сайту...
Прости, но с какого ты решила, что кирилица в пароле это адское зло? В пароле должны быть любые символы. Если ты хранишь пароли в БД и имеешь проблему с кодировкой при сравнивании (при авторизации пользователя), то это твои проблемы, которые всё равно должны быть решены, ибо если так, то на выходе у тебя и в новостях (etc.) будет проблема с кодировкой. Вот единственное оправдание, которое я смог найти для отрицания кирилицы в пароле - кодировка. Всё. Какая тебе-то разница что за символы ввёл пользователь для обеспечения безопасности своего аккаунта? Валерия, не тупи, не надо вырезать никакие символы из пароля.
Тем более в БД не будет самого пароля, будет только его хем-сумма. а строка от которой ты берешь хеш может быть любой
Для этого не обязательно иметь хостинг. Это может быть один из компьютеров в ботнете, например. Да и просто домашний комп с динамическим IP. Даже если - при цене 3$ за хостинг в месяц можно купить десяток хостингов на месяц, и разослать немеряно писем. Это вполне реальная, осознанная угроза.
Согласен Целиком и полностью А я считаю, что все таки кириллицу не стоит включать в пароль. Например, если человек зарегистрировался, а потом выехал за границу, то там он может кириллицу так быстро и не найти... Плюс на некоторых коммуникатрах (если человек хочет с мобилы зайти) - кириллица в пароле недопустима... А могут еще быть и с браузерами нюансы, они могут кириллицу при передаче конвертировать...
Я и не собиралась тупить, мне лишние заморочки ни к чему, я бы с удовольствием оставила все как есть, пусть хоть арабскими пишут, хоть иероглифами, НО (! вот имеено из-за этого НО и начинаются все заморочки) я делаю не просто сайт ради сайта, а сайт (если кто вдруг не заметил мой аватар) для некоторой онлайн-игры, и регистрация на сайте - это регистрация игрового аккаунта. А игровой клиент просто-напросто не поддерживает ввод кириллицы в окне логин/пасс. Так что - все-таки прийдется проверку добавить )
ориентируясь на тот код, который приведен в посте от Добавлено: Ср Янв 23, 2008 9:04 pm 1) строки 19 и 21 удалить и заменить на $step = isset($_POST['step']) ? intval($_POST['step']) : false; строку 76 удалить. 2) в блоках case заменить '2' на 2 и т.п., иначе зачем приводить что-то к int - типу, если сравнение все равно идет по стрингу? 3) в порядке ИМХО, или обрамлять все if-ы фигурными скобками, или менять на $centertext = ($rules == 'on') ? $tform : 'Регистрация невозможна без согласия с правилами сервера'; 4) в сравнениях и вообще в строках применение "" оправданно только если нужно применять инструкции типа "В корзине $cnt товаров", в остальных случаях рулят апострофы, так как в двойных кавычках пых пытается найти свои переменные, все, что в апострофах, сразу летит в вывод 5) если в строке 48 фрагмент {2,} заменить на {6,} то строки 40 и 41 не понадобятся 6) а что выведется в сообщении, если пароль равен логину, длина логина 6 символов? 7) зачем использовать pconnect к серверу? судя по имени базы l2jrt - это база ява-сервера линейки, так его коннект все равно использовать не получится 8) имхо, проверки в строках 61 и 62 лучше все таки заменить на уникальный индекс в таблице. кстати, это еще и ускорит отработку всех запросов, где идет ограничение или объединение по никнейму. на сколько мне известно, в яве их - весьма и весьма много. 9) имхо, если проверка в строке 77 - только из-за того, что в строке 73 $centertext оставляется пустой, то лучше строку 73 заменить на строку 78, а 77 - удалить за ненадобностью
lexa в данном конкретном случае кириллица в пароле - зло. клиенты lineage Уже очень давно тупо не дают вводить в поле пароль кириллические символы.
DarkElf Кое-что поправила, по вашим советам, большое за них спасибо Кое-что трогать не стала. Вот что имеем на данный момент: PHP: <?php $title = $conf['sitename']." - Создание аккаунта"; $ptitle = "Регистрация"; $trules = '<form name="reg_rules" method="post" action="?p=register"> <div class="qu">Регистрируя аккаунт на нашем сервере, вы автоматически соглашаетесь с правилами нашего сервера. <br> Главное правило сервера - админ всегда прав.<br> Остальные правила вы можете почитать тут: <a href="?p=rules">Правила сервера</a>. Приятной игры !!!</div><br> <input type="hidden" name="step" value="2"> <center> <input type="checkbox" name="rules"> Я обязуюсь выполнять правила сервера<br> <input type="submit" value="Продолжить" class="but"> </center> </form>'; $tform = '<form name="reg_form" method="post" action="?p=register"> <table width=100% border="0" cellpadding="2" cellspacing=""> <tr><td align=right valign="top">Логин:</td> <td valign="top"><input name="login" type="text" class="inp"> <br> <font color = #b40404 size=-2>Только латинские буквы и цифры.<br> Минимум 6 символов. </font> </td></tr> <tr><td align=right valign="top">Пароль: </td><td valign="top"><input name="pass" type="text" class="inp"> <br> <font color = #b40404 size=-2>Только латинские буквы и символы.<br> Минимум 8 символов. </font> </td></tr> <tr><td align=right valign="top">Повторите пароль: </td><td valign="top"><input name="repass" type="text" class="inp"> <br> <font color = #b40404 size=-2>Введите пароль еще раз. </font> </td></tr> <tr><td align=right valign="top">E-mail: </td><td valign="top"><input name="email" type="text" class="inp"> <br> <font color = #b40404 size=-2>Вводите реально существующий адрес.<br> Он может понадобиться вам<br>для восстановления пароля. </font> </td></tr> <tr><td align=right valign="top">Секретный вопрос: </td><td valign="top"><input name="ques" type="text" class="inp"> <br> <font color = #b40404 size=-2>Требуется для восстановления пароля.<br>Запомните его. </font> </td></tr> <tr><td align=right valign="top">Секретный ответ: </td><td valign="top"><input name="answ" type="text" class="inp"> <br> <font color = #b40404 size=-2>Требуется для восстановления пароля.<br>Запомните его. </font> </td></tr> <tr><td align=right valign="top">Реферал: </td><td><input name="ref" type="text" class="inp"> <br> <font color = #b40404 size=-2>Ник чара человека, благодаря которому<br>вы начали играть на нашем сервере.<br>Чем больше человек при регистрации<br>укажут вас в качестве реферала, тем<br>больший приз вы получите. </font> </td></tr> <tr><td></td><td><input type="submit" value="Продолжить" class="but"></td></tr> </table> <input type="hidden" name="step" value="3"> </form>'; $step = isset($_POST['step']) ? intval($_POST['step']) : false; switch ($step){ case 2:{ $rules = $_POST['rules']; $centertext = ($rules == 'on') ? $tform : 'Регистрация невозможна без согласия с правилами сервера'; break; } case 3:{ if ((isset($_POST['login']))AND(isset($_POST['pass']))AND(isset($_POST['repass']))AND(isset($_POST['email']))){ $login = $_POST['login']; $pass = $_POST['pass']; $repass = $_POST['repass']; $ques = $_POST['ques']; $answ = $_POST['answ']; $ref = $_POST['ref']; if(strlen($login) < 6) $err[] = 'Минимальная длинна логина - 6 символов'; if(strlen($pass) < 8) $err[] = 'Минимальная длинна пароля - 8 символов'; if($pass==$login) $err[] = 'Не разрешено использовать одинаковые логин и пароль'; if($pass!=$repass) $err[] = 'Введенные пароли не совпадают'; if(!preg_match("/^[A-Za-z0-9]{6,}$/",$login)) $err[] = 'Логин содержит запрещенные символы.'; if(!eregi("^[a-zA-Z0-9]+[_a-zA-Z0-9-]*(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$", $email)) $err[] = 'Не правильный формат адреса электронной почты'; if(strlen($ques) < 20) $err[] = 'Слишком короткий секретный вопрос'; if(strlen($answ) < 20) $err[] = 'Слишком короткий секретный ответ'; if(!preg_match("/^[A-Za-z0-9]{6,}$/",$ref)) $err[] = 'Не правильный ник реферала.'; if ($err!='') $centertext = implode('<br/>', $err); } else{ $centertext = 'Не заполнены все обязательные поля.'; } if ($centertext ==''){ $db = mysql_connect('localhost','root','root'); mysql_query('SET CHARACTER SET utf8'); mysql_select_db('baza'); $result = mysql_query("SELECT login FROM `accounts` WHERE login='$login'"); if(mysql_num_rows($result)==0){ $ques = mysql_real_escape_string($ques); $answ = mysql_real_escape_string($answ); mysql_query("INSERT INTO `accounts`(login, password, email) VALUES ('$login', '$pass', '$email');") or die(mysql_error()); $centertext = "Добро пожаловать, $login. Аккаунт успешно создан."; } else{ $centertext = 'К сожалению этот логин уже занят.'; } } break; } default:{ $centertext = ""; } } if ($centertext == '') $centertext = $trules; ?> В запросе не хватает полей, пока так надо, когда буду ставить на сервер - буду править, сейчас дома стоит, базы нет ) Строки 124 и 125 - этого хватит для защиты ? Как можно делать поиск по ИД, если надо проверить логин ? Или я чего-то не понимаю ?...
Зачем создавать массив, когда можно конкатенировать ошибки к одной переменной? Валерия Неужели Вы изучили php ради lineage?
Да я его и не изучала Просто делаю сайт себе. Я паскаль хорошо знаю и С++, так что особых проблем не увидела. Помогите вот с этим: PHP: <?php ... if(!eregi("^[a-zA-Z0-9]+[_a-zA-Z0-9-]*(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$", $email)) $err[] = 'Не правильный формат адреса электронной почты'; ... ?> на домашнем компе норм все, на сервере ни 1 мыла не пропускает... С регулярными выражениями у меня напряженка Сама не могу разобраться. Спасибо.
Валерия мм, с каким-то из С4 серверов шел комплект php - скриптов для сайта.. но с4 я давно удалил. что мешает сделать авторегистрацию аккаунтов?
DarkElf, Ничего не мешало поставить авторегу, так же ничего не мешало скачать любую веб-обвязку, их мона найти десятки, от очень приличных, до совсем страшных Однако, только качая и пользуя чужое, ни к чему хорошему не прийдешь
http://phpclub.ru/detail/article/regexp_1 Лучшая статья из всего, что я видел по регулярным выражениям. Разжёвано - дальше некуда. Остаётся только проглотить и переварить.
Вполне соизмеряю Сегодня-завтра запускаю Может кто-нить все-таки поможет проверку е-майла поправить ?)
Тогда попробуй копнуть в сторону setlocale(). Вероятно, на хостинге, в отличии от локального сервера, по усолчанию стоит не кирилическая кодировка. Код (Text): setlocale(LC_ALL, 'ru_RU.cp1251', 'ru_RU.CP1251'); // методом перебора Самая большая проблема заключается в имени локали. Нет стандарта имени и каждый хостер может по-своему её называть. Например, на каком-то из хостингов за cp1251 выдавали koi8-r, не со зла, а как замену. Поэтому лучше спроси хостера как-то так: Возможно, ты можешь найти этот ответ и в факе хостера.