Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2009, 19:15   #1
Sounds
 
Регистрация: 08.01.2009
Сообщений: 6
По умолчанию Скрипт регистрации

Все привет! Нужна помощь!
Есть идея написать скрипт регистрации пользователей на сайте.
При регистрации в базу данных MySQL записывается: Логин, Пароль, E-mail.
Форма ввода данных состоит из полей:
1) Логин($name)
2) Пароль($pass)
3) Подтверждения пароля($pass2)
4) E-mail($email)
5) Кнопка($submit)
Ниже приведен код формы:
Код HTML:
<form action="index.php" method="post">
Логин:<br>
<input type="text" maxlength="25" name="name" size="20"><br>
Пароль:<br>
<input type="password" maxlength="25" name="pass"size="20"><br>
Подтверждения пароля:<br>
<input type="password" maxlength="25" name="pass2" size="20"><br>
E-mail:<br>
<input type="text" maxlength="25" name="email" size="20"><br>
<input name="submit" type="submit" class="submit" value="Голосовать">
</form>
Данные в ведённые в форму передаём в скрипт index.php
Теперь надо проверить данные:
PHP код:
<?
// если кнопка нажата то начинаем проверку, регистрацию
If($_POST[‘submit’]==true){
// дальнейший код
}
?>
Вопрос №1: Как можно грамотно защитить формы?
Вопрос №2 От чего надо защищать формы?
Вопрос №3: Как грамотно написать сам код и обработчик ошибок?
Sounds вне форума Ответить с цитированием
Старый 03.03.2009, 01:23   #2
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

2) Если вы будете использовать БД, то от sql-иньекций.
3) Для этого нужно проверить по пунктам
- Всё ли обязятельные поля заполнены и имеют корректную длинну if (strlen($name)<6 or strlen($name)>30) die("Ошибка - некоретная длинна");
- Проверить, совпадают ли пароли И первый пароль не пустой if ($pass!=$pass2 or $pass=='') die ("ошибка - пароли не совпадают");
- Отсечь все символы, которые могли б способствовать иньекции, включая пробел.
- Проверить в БД, есть ли такой пользователь (по полю name) SELECT FROM userv WHERE name="$name"
- Если есть, добавить INSERT INTO users VALUES(...
Вот собса и всё)
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 03.03.2009, 05:54   #3
FANATID
Пользователь
 
Регистрация: 12.02.2009
Сообщений: 62
По умолчанию

Dj_smart, про капчу забыл сказать
FANATID вне форума Ответить с цитированием
Старый 03.03.2009, 13:08   #4
Sounds
 
Регистрация: 08.01.2009
Сообщений: 6
По умолчанию

To Dj_smart
Спасибо за помощь, но не могли бы вы разъяснить что такое sql-иньекция, и как от неё защититься.
To FANATID
Цитата:
Сообщение от FANATID Посмотреть сообщение
про капчу забыл сказать
Если не секрет, то что вы имели в виду?

P.S. Все спасибо за помощь!!!
Sounds вне форума Ответить с цитированием
Старый 03.03.2009, 14:01   #5
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Есть некая база, так вот иньекция это внесение злоумышленником в базу нежелательной записи, которая дает ему права администатора/удаляет то, что он хотел/вставляет подобные записи.
На примере:
SELECT FROM users WHERE name="$name" AND password="$pass"
всё хорошо, скрипт примёт юзера, если найдет такую запись.
НО! Если например вместо $pass в поле ввести sdd" OR "1
то запрос будет таким
SELECT FROM users WHERE name="sdd" OR "1" AND password="$pass"
(в MySql единица считается правдой) и ЛЮБОГО ПОЛЬЗОВАТЕЛЯ СКРИПТ ПУСТИТ.
Просто неразрешив пользователю употреблять пробелы, кавычки (" ' `), т.е разрешив только A..z, _ , 0..9 мы отсечем такие возможности.
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 03.03.2009, 15:31   #6
FANATID
Пользователь
 
Регистрация: 12.02.2009
Сообщений: 62
По умолчанию

Sounds, http://ru.wikipedia.org/wiki/CAPTCHA
FANATID вне форума Ответить с цитированием
Старый 03.03.2009, 16:48   #7
Sounds
 
Регистрация: 08.01.2009
Сообщений: 6
По умолчанию

To Dj_smart, FANATID
Спасибо вам!
Теперь я приблизительно понял! После ваших объяснений у меня получилось следующие:
PHP код:
<?
echo'
<form action="index.php" method="post">
Логин:<br>
<input type="text" maxlength="25" name="name" size="20"><br>
Пароль:<br>
<input type="password" maxlength="11" name="pass"size="20"><br>
Подтверждения пароля:<br>
<input type="password" maxlength="11" name="pass2" size="20"><br>
E-mail:<br>
<input type="text" maxlength="31" name="email" size="20"><br>
<input name="submit" type="submit" class="submit" value="Голосовать">
</form>
'
;

if(
$_POST['submit']==true){
if (
strlen($name)<or strlen($name)>24) die("Логин должен содержать от 3-х до 24-х символов!");
if (
strlen($pass)<or strlen($pass)>10) die("Пароль должен содержать от 3-х до 10-ти символов!");
if (
$pass!=$pass2 or $pass=='') die ("Пароли не совпадают");
if (
strlen($email)<or strlen($email)>30) die("Email должен содержать от 5-х до 30-ти символов!");
$name=htmlspecialchars(trim($_POST['name']));
$pass=htmlspecialchars(trim($_POST['pass']));
$email=htmlspecialchars(trim($_POST['email']));
}
?>
Теперь осталось понять как сделать регулировку выражения с помощью preg_match, точнее сказать как составить запрос на регулировку?
PHP код:
if(!preg_match("[0-9]_[a-z]")){echo "Ошибка!";} 
Посмотрите правильно ли это?
Какие ещё будут замечания?
Спасибо вам за помощь!!!
Sounds вне форума Ответить с цитированием
Старый 09.03.2009, 23:17   #8
Jensi
beneto.ru
Форумчанин
 
Регистрация: 09.03.2009
Сообщений: 174
По умолчанию

PHP код:
if(!preg_match("|^[\d]+$| ",$id)){
exit(
"Возможно такой страницы не существует,проверьте URL");

$id - идентификатор
Свой код замени на:
PHP код:
if(!preg_match("[0-9]_[a-z]")){
exit( 
"Ошибка!");

А то он у тебя продолжится просто
Jensi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
мой сайт взломали и в коды скриптов добавили вот этот скрипт. Что за скрипт? nsbox JavaScript, Ajax 9 21.01.2010 18:19
Реализация регистрации Sanek777 Безопасность, Шифрование 1 08.11.2008 17:46
Форма регистрации Esenin Фриланс 8 31.05.2008 18:16
запрет повторной регистрации bllem PHP 12 27.11.2006 10:24