Witam - chciałbym podzielić się gotowym skryptem rejestracji użytkownika w serwisie. Jednocześnie prosiłbym o Wasze opinie dotyczące w/w skryptu.
1) Czy skrypt Waszym zdaniem jest bezpieczny ...
2) Czy można go jakoś zoptymalizować ...
3) ... ? może macie jakieś propozycje?
Rejestracja użytkownika w serwisie – pliki index.html, rejestracja.html, list.php, potwierdz.html
1) Formularz – index.html
<form action="..." method="POST"> //imie
<input type="text" name="imie" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB"> //nazwisko
<input type="text" name="nazwisko" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB"> //user
<input type="text" name="user" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB"> //password
<input type="password" name="password" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB"> //password2
<input type="password" name="password2" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB"> //email
<input type="text" name="email" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB"> //przycisk
<input type="image" value="rejestruj" src="..." width="..." height="...">
2) Odbiór danych z formularza – rejestracja.html
<?php
function odbierz($pole) {
}
$imie=odbierz($_POST['imie']);
$nazwisko=odbierz($_POST['nazwisko']);
$user=odbierz($_POST['user']);
$password=odbierz($_POST['password']);
$password2=odbierz($_POST['password2']);
$email=odbierz($_POST['email']);
//ten adres będzie w nagłówku wiadomości
$twoj_adres="jakis adres";
//sprawdzamy pole imie
$blad++;
echo" <font color=\"#000000\">Imię nie może być krótsze niż 2 znaki.</font>"; echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>"; }
//sprawdzamy pole nazwisko
$blad++;
echo" <font color=\"#000000\">Nazwisko nie może być krótsze niż 2 znaki.</font>"; echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>"; }
//sprawdzamy czy podany login nie znajduje się na liscie zabronionych
$unav_logins = array('admin', 'administrator', 'admini', 'root', 'bin', 'daemon', 'adm', 'lp', 'sync', 'shutdown', 'halt', 'mail', 'news', 'uucp', 'operator', 'games', 'mysql', 'httpd', 'nobody', 'dummy', 'www',
'cvs', 'shell', 'ftp', 'irc', 'debian', 'ns', 'download',
' ');
$blad++;
echo" <font color=\"#000000\">Proszę wybrać inny login.</font>"; echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>"; }
//sprawdzamy pole user
$blad++;
echo "<font color=\"#000000\">Login musi mieć od 3 do 50 znaków bez polskich liter i spacji.</font>"; echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>"; } else {
//wybieramy tabele user
include('user.php');
if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) { $wynik=mysql_query("SELECT * FROM $mysql_tabela WHERE user='$user'"); } else echo "Nie można połączyć się z bazą."; } else echo "Nie można połączyć się z serwerem MySQL."; $blad++;
echo"<font color=\"#000000\">Podany login jest już zajęty. Zaproponuj inny.</font>"; echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>"; }
}
//sprawdzamy pole password
if($password !== $password2) {
$blad++;
echo "<font color=\"#000000\">Proszę podać identyczne hasła.</font>"; echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>"; }
$blad++;
echo "<font color=\"#000000\">Hasło musi mieć od 6 do 50 znaków.</font>"; echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>"; }
//sprawdzamy pole email
if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+.)+[a-z]{2,4}$",$email)) { $blad++;
echo "<font color=\"#000000\">E-mail nie został podany prawidłowo.</font>"; echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>"; }
//w przypadku wystapienia bledu pokaz link powrot w przeciwnym wypadku wykonuj skr
pt dalej
if ($blad!=0) {
echo"<br><a href=\"javascript:history.go(-1)\">powrót</a>"; } else {
if ($blad==0) {
//tworzymy unikalny kod wiadomości w celu potwierdzenia rejestracji
//szyfrujemy hasło
$password = md5($password); if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) { $wyni=mysql_query("INSERT INTO $mysql_tabela VALUES('$imie', '$nazwisko', '$user', '$password', '$kod', 1, NOW(), '$email')"); } else echo "Nie można połączyć się z bazą."; } else echo "Nie można połączyć się z serwerem MySQL."; //w przypadku braku błędów wysyłamy list potwierdzajacy rejestracje
if ($wynik) {
//wczytujemy list do wysłania
include('list.php');
//wysyłamy dane na podany adres email w trakcie rejestracji
mail($email, "Tytuł wiadomości", $list, "From: $twoj_adres"); echo "<font color=\"#000000\">Aby dokończyć proces rejestracji odbierz e-mail.</font>"; } else {
echo"Wystąpił błąd. W przypadku ponownego pojawienia się komunikatu skontaktuj s
ię z dministratorem <a href=\" \">kontakt</a>";
}
}
}
?>
3) zawartość pliku list.php
<?php
$list="Aby potwierdzic rejestracje w serwisie … kliknij w ciagu 48 godzin na adres:
… /potwierdz.html?kod=$kod
Jezeli nie chcesz sie rejestrowac, zignoruj ten list.
";
?>
4) zawartość pliku potwierdz.html
<?php
//zawartość pliku potwierdz.html
if ($kod<>"") {
//wybieramy tabele user
include('user.php');
if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) { WHERE data<=DATE_SUB(NOW(),INTERVAL 2 DAY) and status=1");
SET status='5', data=NOW() WHERE kod='$kod' and status=1");
WHERE kod='$kod' and status=5");
} else echo "Nie można połączyć się z bazą."; } else echo "Nie można połączyć się z serwerem MySQL."; echo "Dziękujemy. Rejestracja została zakończona pomyślnie."; }
}
echo "Rejestracja nie może zostać dokończona - sprawdź czy link jest poprawny lub skontaktuj się z administratorem <a href=\" … \">kontakt</p>"; }
?>
co o tym sądzicie?
Ten post edytował if_error 28.08.2007, 19:07:48