Kiedyś napisałem prosty CRM który działał ale był skrajnie niebezpieczny, tzn nie ma żadnego filtrowania danych przesyłanych z formularzy ani też tych zapisywanych w bazie.
Teraz zająłem się właśnie kwestią bezpieczeństwa aby mój twór stał się w końcu przydatny.
Na pierwszy ogień poszła kwestia panelu logowania i tu pytanie: czy sprawdzenia hasła i loginu jak poniżej jest Waszym zdaniem wystarczająco bezpieczne:
<?php
include('db_con.php'); //łączy z serwerem i wybiera bazę danych
if(isset($_POST['login']) || isset($_POST['haslo'])){ //sprawdza czy hasło lub login zostały wprowadzone i przesłane metodą POST $zapytanie = "SELECT * FROM biz_user WHERE p_login = '".trim($_POST['login'])."'"; // wybiera z bazy MySQL rekordy z komórką p_login równą podanemu loginowi if(preg_match('/^[a-zA-Z0-9.\-_]+\@[a-zA-Z0-9.\-]+\.[a-z]{2,4}$/D', trim($_POST['login'])) && mysql_num_rows(mysql_query($zapytanie)) > 0){ // sprawdza czy ilość znalezionych rekordów jest większa od zera oraz czy login będący adresem e-mail jest zgodny z odpowiadającym mu wyrażeniem regularnym $zapytanie = "SELECT * FROM biz_user WHERE p_login = '".$_POST['login']."'&& p_haslo = '".$_POST['haslo']."'"; // wybiera z bazy MySQL rekordy z komórką p_haslo równą podanemu hasłu i komórką p_login równą podanemu loginowi
if(preg_match('/[^\/\'\`\"\n\s\\\\]{2,20}$/D', $_POST['haslo']) && mysql_num_rows(mysql_query($zapytanie)) > 0){ // sprawdza czy ilość znalezionych rekordów jest większa od zera $zapytanie = "SELECT * FROM biz_user WHERE p_login = '".$_POST['login']."' LIMIT 1"; // pobiera używane w sesji dane użytkownika
$_SESSION['user_id'] = $wiersz['p_id']; //zapisuje ID użytkownika w zmiennej sesyjnej
$_SESSION['user'] = $wiersz['p_imie'].' '.$wiersz['p_nazwisko']; //zapisuje imię i nazwisko użytkownika w zmiennej sesyjnej
$_SESSION['status'] = $wiersz['p_status']; //zapisuje ststus użytkownika w zmiennej sesyjnej
break;
}
$_SESSION['zalogowany'] = true;
header("Location: lista_firm.php"); }
else{
header('Location: index.php?log_error=2'); }
}
else{
header('Location: index.php?log_error=1'); }
}
else{
<center>
<br />
<br />
<img src="picture/logo.png">
<br />
<br />
<h3>Logowanie do systemu</h3>
';
if (isset($_GET['log_error'])){ $log_error=$_GET['log_error'];
if ( $log_error == 1
) echo '<b>Nie istnieje taki użytkownik! </b><br />'; if ( $log_error == 2
) echo '<b>Podane hasło jest nieprawidłowe! </b><br />'; }
<form action="index.php" method="post">
<br />
Login: <input type="text" name="login" size="30"/><br/>
<br />
Hasło: <input type="password" name="haslo" size="30"/><br/>
<br />
<input class="przycisk" type="submit" value="WEJŚCIE" /><br/>
</form>
</center>
';
}
?>
Zakładam że loginem jest adres e-mail a hasło nie może zawierać znaków \ / ' ` " \n \s