Poprawiłem to według wskazówek.
<?php
// zabezpieczenie danych odebranych z $_POST
// zabezpieczenie danych wysyłanych do bazy
// odbieranie i sprawdzenie danych z formularza $_POST
if (isset($_POST['signin'])){
if (isset($_POST['login']) && isset($_POST['password'])){ //sprawdzenie czy login i hasło zostało przesłane
$login = zgp($_POST['login']); //oczyszczenie funkcją
$password = $_POST['password'];
//sprawdzanie loginu
$loginnotallowed = array( 'admin', 'administrator', 'admini', 'root', 'reboot', 'poweroff', ' '); if(in_array($login, $loginnotallowed)) {$error=1;} //porównanie loginu z listy zablokowanej if (empty($login)) {$error=1;} //sprawdza czy pole jest puste if(!preg_match("/[a-z0-9_]/",$login)){$error=1;} // tylko małe litery i liczby oraz dolny myślink if(preg_match("/[A-Z]/",$login)){$error=1;} // błąd w przypadku wpisania dużych liter if(preg_match("/[\s\r\n]/",$login)){$error=1;} //błąd w przypadku użycia spacji if(is_array($login)){$error=1;unset
($login);} //błąd w wypadku tablicy i usunięcie jej
//sprawdzanie hasła
if (empty($password)) {$error=1;} //sprawdza czy pole jest puste if(is_array($password)){$error=1;unset
($password);} //błąd w wypadku tablicy i usunięcie jej
if ($error){echo 'Niepoprawny login lub hasło';}
if (!$error){// jeśli zadny z powyższych ifów nie zwrócił błedu $error = 1;
require_once('connect.php'); //połączenie z bazą
$login = wds($_POST['login']); //oczyszczenie funkcją wysyłającą do bazy
$password = md5($_POST['password']); //kodowanie md5
$sprawdzlogin = mysql_query("SELECT id, login, password FROM userlogin WHERE login = '$login' AND password = '$password' LIMIT 1"); $wyniksprawdz = mysql_num_rows($sprawdzlogin); //sprawdzanie loginu i hasła
if(!$wyniksprawdz){//sprawdzanie wynikiu odebranego z bazy
$errordb=1; echo 'Niepoprawny login lub hasło'; }
if(!$errordb){ // logowanie
$_SESSION['logon'] = 1; //potwierdza poprawne zalogowanie
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; //umieszcza w sesji adres IP użytkownika
$_SESSION['useragent'] = $_SERVER['HTTP_USER_AGENT']; //umieszcza w sesji useragenta użytkownika
header('Location: http://'.DOMAIN_NAME
.'/start');
}
}
}
}
Teraz jest dobrze? Macie jeszcze jakieś propozycje, sugestie odnośnie poprawienia bezpieczeństwa? Zdaję sobie sprawę że temat był wałkowany nie raz, jednak przy właśnie takim wałkowaniu można się czegoś nauczyć (IMG:
style_emoticons/default/winksmiley.jpg)
ps. czy któryś z moderatorów mógłby poprawić temat? U mnie wyskakuje komunikat że nie mogę tego zrobić przy zapisywaniu.
Ten post edytował !*! 20.07.2010, 11:04:01