Спасибо! Немного базу откоректирую. И в скрипт регистрации внесу изменения относительно "соли". И еще: Особенно интересно что такое "КАПТЧА"!?????
Мне не все понятно в твойх скриптах, общая логика ясна, но по части синтаксиса я пока слаб и неочень понимаю что значит вопросик к примеру вот сдесь, боюсь только что это вообще очень плохо, что я этого еще не знаю! Вот сдесь к примеру: PHP: <?php $cmd = isset($_GET['cmd'])?trim($_GET['cmd']):'login'; ?> Это наверное самое непонятное. Вот еще: тоже не понятно что значит, скорее всего это какое то упрощение более сложного синтаксиса? : PHP: $str .= В общем если немного побольше комментариев по синтаксису и чуть меньше по логке, я думаю у меня будет полная ясность в этом вопросе! Извини если кажусь слишком настырным. Но все же я очень хочу реализовать свой проет, а сейчас делаю систему, которая бы регистрировала разработчиков, идейных авторов и так далее, ну вы сами поняли! Это будет отдельный модуль моей системы (SportAnalayzer). К тому же я договорился предварительно с одной компанией о создании специального, спциализированного и заточенного под греблю навигационного прибора GPS с которого планируется поставка данных в разрабатываемую систему, как лучше организовать обмен данными с этим устройством, вот варианты по Блюту3су это дешевле так как енадо делать в устройстве GPRS передачу, или все таки по GPRS устройство управляется я так понял Явой. Что мне может посоветуете по этому поводу? С уважением, заранее спасибо.
PHP: <?php if(isset($_GET['cmd'])) { $cmd = trim($_GET['cmd']); } else { $cmd = 'login'; } ?> $str = $str . 'что-то';
Доброй ночи! Вот туго что то у меня получается, еле логику натянул, проверьте вроде правильно? Осталось запрограммировать ее на ПХП. Постараюсь сам разобраться. Вот код скрипта авторизации: PHP: <?php //session_name(aftoriz_razrabotchikov); session_start(); echo ' <head> <title>Афторизация разработчика системы "SportAnalayzer"</title> </head>'; echo "<body bgcolor='#d0fa92'>"; $forma_aftoriz= "<form action='' method=POST> <table> <tr> <table> <tr> <td>Имя разработчика:</td> <td><input type=text name='aftoriz_name_avtora' size='37' maxlength='30' value='$_SESSION[aftoriz_name_avtora]'></td> </tr> <tr> <td>Ваш пароль:</td> <td><input type=password name='aftoriz_password' size='37' maxlength='30' value = '$_SESSION[aftoriz_password]'></td> </tr> </table> </tr> <tr> <table> <tr> <td> <input type=submit name='aftoriz' value='Афторизоваться'> </td> </tr> </table> </tr> </table> </form> "; if (!isset($_POST['aftoriz_name_avtora']) && !isset($_POST['aftoriz_password'])) { echo 'Здравствуйте, введите свои учетные данные для афторизации среди разработчиков системы!'; $error='n'; echo $forma_aftoriz; } else { //Удаляем начальные и конечные пробелы в вводимом значении поочереди в каждом нужном нам поле при помощи trim();. //Сейчас проверяем наличие переменной $_POST['name_avtora']. if (isset($_POST['aftoriz_name_avtora'])) {$name=trim($_POST['aftoriz_name_avtora']); $name=htmlspecialchars($name); $_SESSION['aftoriz_name_avtora']=$name;} else $name==""; //Если значение переменной пусто, то выводим сообщению пользователю об ошибке и устанавливаем флажек об ошибке $error='y';. if ($name=="") {$error='y'; //Если переменнвая $name_avtora не установлена, просим повторить ввод данных пользователем. echo 'Вы не ввели "<font color="#FF0000">Имя разработчика</font>"<br>'; }; //Сейчас проверяем наличие переменной $_POST['password']. if (isset($_POST['aftoriz_password'])){ $pasw1=$_POST['aftoriz_password']; $pasw1=htmlspecialchars($pasw1); $_SESSION['aftoriz_password']=$pasw1;} else $pasw1==""; //Если значение переменной пусто, то выводим сообщению пользователю об ошибке. if ($pasw1=="") {$error='y'; //Если переменнвая $password не установлена, просим повторить ввод данных пользователем. echo 'Вы не ввели "<font color="#FF0000">Ваш пароль</font>"<br>'; }; if ($error=='y') {echo "<a href=# onClick='history.back()'><br><br>Вернитесь назад и отредактируйте пожалуйста не корректные данные!.</a><br>";} else { echo 'Все данные введены правильно!!! Можно занятся ими далее.<br>'; //выяснить есть ли пользователь в БД с указанным при афторизации именем? $massiv_names_bd='массив имен из бд' if ($name==какое то значение из массива имен из БД) { //если данный пользователь существует, то присвоить его идентификационный номер из БД переменной $user_id код: $user_id='Данные из БД'; //прочитать из БД соль для указанного при афторизации пользователя и присвоить ее значение переменной $salt код: $salt='Данные из БД'; //Получить хеш введенного при афторизации пароля $passaftoriz=md5(md5($pasw1.$salt)); //Получить хеш пароля из БД для пароля афторизующегося пользователя $pass_bd="Запрос к БД с получением хеша пароля для конкретного пользователя" //Если хеши совпадают, то пользователь считается афторизованным и получает доступ к закрытым частям системы if ($passaftoriz==$pass_bd) {echo 'Вы афторизованы';} //Если хеши несовпали, сообщить что неправильный пароль или заходиш не под тем именем. else { echo 'Неправильный пароль или Вы заходите не под своим именем!'; } } //если такого пользователя, с указанным именем в БД нет, то сообщить ему об этом else { echo 'Такого пользователя не существует, попробуйте афторизоваться снова под другим именем или зарегистрируйтесь в системе для разработчиков'; echo $forma_aftoriz; } }; echo '</body>'; ?> В БД добавил поле с "солью" записываемой при регистрации пользователя индивидуально для каждого. В итоге пользователи у меня регятся правильно на мой взгляд, только вот авторизоваться у них пока не получается, будим учить!
Это технический вопрос. Наверное, я точно не знаю, это должно сказаться на безопасности хранимых паролей, они будут каждый генирироваться со своей солью, и в случае подбора одной соли от одного пользователя она не поможет другому так как у последнего другая соль. Хотя может это только затруднит задачу взломщику а не остановит его. Тем неменее от того что я ее использую ничего толком не меняется для пользователя! И еще что значит Я так понимаю, что соль можно взять и из БД и из скрипта если она указана гдето в нем как константа например две буквы.
Kreker а чтоб уникальность паролей окончательно организовать Stasrot1 при перевой загрузке формы авторизации $_SESSION[aftoriz_name_avtora] пуста и можно нарваться на предупреждение от php, если показ ошибок включён. Писал же, @$_SESSION[aftoriz_name_avtora] . Заполнять таким образом поле с паролем нет смысла. Если человек ошибся в каком-нибудь символе, всё равно увидит только звёздочки. Из того, что смущает: пароль и htmlspecialchars(пароль) — не одно и то же. md5() вернёт разные хэши и, следовательно, пароли не совпадут. и ещё вот это $massiv_names_bd='массив имен из бд'. Тащить из базы всех пользователей — слишком расточительно. Надо проверять запросом наличие в БД пары логин-пароль и всё.
Luge, Я ведь при регистрации пользователя его пароль тоже пропускаю через htmlspecialchars(), потом его хеширую и только после заношу в БД. В скрипте авторизации я получаю пароль от авторизуемого пользователя, пропускаю через указанную выше функцию, только после этого получаю его хеш и после всего этого сравниваю их хеши! Вроде все правильно! Хеши должны получаться одинаковые так как и в том и другом случае я использую по сути одну и ту же последовательность действий. Теперь вроде у тебя этот пункт не должен вызывать сомнения, да? А то они у меня появятся! А по поводу расточительства? Как это делается тогда? Код (Text): Надо проверять запросом наличие в БД пары логин-пароль и всё.
Мне кажется, что достаточно одной соли для всех. Даже вдруг, если через несколько недель злоумышленник все-таки отгадает соль, то ему придется снова тратить время на другие пароли. А если еще и защиту от брутфорса поставить (бан по ип)... Лучше уж так трепетно относись к защите бд от инъекций. Если таковая случиться, никакая соль не поможет.
Про это подробнее можно? Или ссылочку, а если не сложно то укажите пожалуйста на мои уязвимые места, заранее спасибо. И вот про это: Тоже ссылочку или поподробнее, пожалуйста! За все заранее спасибо!
Luge, выручай, пробую изменить твой код, дело в том, что когда пользователь не ввел к примеру и пароль и емайл, то выводится только одно сообщение, что не введен емайл и сообщение о том, что пароль не введен не выводится! А когда поле для емайла заполнено а пароль нет, то выводит сообщение о пароле, в общем скрипт выводит только одну ошибку, а на самом деле их не одна а две и более! Я пробую применить массив и в него заношу данные и пробую их обработать, в общем чтото не то я делаю, похоже с логикой запутался! :-(
Проверил, и усвоил, спасибо. Теперь буду делать так, чтобы скрипт регистрации разработчиков нерегистрировал пользователей с одинаковыми именами, а он у нас именно так и делает!
Вот вопрос: если я авторизовался то как мне переместить пользователя на нужную страницу после авторизации? Вместо вот этого: PHP: <?php else if($cmd == 'profile'){ if(isset($_SESSION['USER']['DEV_ID'])){ $str .= '<table> Вы вошли в свой профайл :-) Вот ваши данные: <br> <tr> <td>Имя разработчика:</td> <td>'.htmlspecialchars($_SESSION['USER']['DEV_NAME']).'</td> </tr> <tr> <td>E-mail разработчика:</td> <td>'.htmlspecialchars($_SESSION['USER']['DEV_EMAIL']).'</td> </tr> <tr> <td>Пол:</td> <td>'.$dev_gender[$_SESSION['USER']['DEV_GENDER']].'</td> </tr> <tr> <td>Вид:</td> <td>'.$dev_type[$_SESSION['USER']['DEV_TYPE']].'</td> </tr> <tr> <td>URL разработчика</td> <td>'.htmlspecialchars($_SESSION['USER']['DEV_URL']).'</td> </tr> </table><br><br> <a href="users.php?cmd=logout">Выйти</a>'; } ?> Вставить вот это?: PHP: <?php else if($cmd == 'profile'){ if(isset($_SESSION['USER']['DEV_ID'])){ include 'путь к нужному файлу со скриптом который пользователь увидит сразу после авторизации.php'; $str .= '<a href="users.php?cmd=logout">Выйти</a>'; } ?> Правильно?
Думаю что пора подключить проверку (или валидность) указанного при регистрации емайла! Поискал по форуму и поиску, в итоге вот что нашел, мне кажется весьма полезно, буду сам изучать и результаты выложу. Вот ссылочка:http://www.codenet.ru/webmast/php/PHP-Registration-Activate.php Там длинная статья про это и не только.
Спасибо, я так и предполагал, но почему то склонился к варианту написанному мной выше, но я так понимаю, что то как я написал можно использовать в других целях, например подключить туда еще какой кусок кода из другого файла? И все уже спать ложусь, поздно уже, а завтра на тренировку утром....
Добрый вечер! Добавил к скрипту регистрации проверку на длинну имени и пароля по следующему принципу: если (длина строки <= 3) {то вы ввели короткий логин} если (длина строки >=15) {то вы ввели слишком длинный пароль} Делал через strlen() Как можно упрастить мой скрипт, у меня вот это не пошло : если (длина строки <= 3 && длина строки >=15) {Вв ввели слишком длинный или короткий логин!}; Почему последний вариант не пашет? Подскажите пожалуйста!