Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]czy takie logowanie jest bezpieczne?
Forum PHP.pl > Forum > Przedszkole
rivesca
Witam, napisałem taki o to kod i nie wiem czy jest bezpieczny. do pliku login.php leci postem login i haslo z formularza, następnie sprawdza czy istnieje takie w bazie jeżeli tak to tworzy sesje o nazwie admin $_SESSION['admin'] = true; następnie by coś robić w pliku admin.php trzeba mieć tą sesje jeżeli ona nie istnieje to przerzuca na login.html


  1. // Plik konfiguracyjny
  2. <?php
  3. class base {
  4. protected $host="localhost";
  5. protected $db="base";
  6. protected $user="root";
  7. protected $pass="root";
  8. protected $connect;
  9.  
  10. public function __construct() {
  11. $this->connect = new PDO("mysql:host=".$this->host.";dbname=".$this->db,$this->user,$this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
  12. }
  13. }
  14.  
  15. $base = new base;
  16. ?>





  1. // Plik logowania
  2. <?php
  3. class login extends base{
  4. function access(){
  5.  
  6. $this->login = htmlentities($_POST['login']);
  7. $this->password = htmlentities($_POST['password']);
  8.  
  9. $login = $this->connect->prepare('SELECT * FROM user WHERE login=:login AND password=:password');
  10. $login->bindParam(':login', $this->login);
  11. $login->bindParam(':password', MD5($this->password));
  12. $login->execute();
  13. $rows = $login->rowCount();
  14. $dane = $login->fetch();
  15.  
  16. if($rows == 1){
  17. $_SESSION['admin'] = true;
  18. header('Location: admin.php');
  19. }else{ $_SESSION['wrong'] = true; exit(); login(); }
  20.  
  21. }
  22. }
  23. $login = new login;
  24. $login->access();
  25. ?>





  1. //Plik dostępu
  2. <?php
  3. if(!isset($_SESSION['admin'])){ header('Location login.html'); exit(); }
  4. ?>
Lion
Wykorzystanie PDO i prepared statements to dobry kierunek. Możesz dane z formularza przefiltrować przy pomocy input_filter i podobnych wbudowanych w PHP funkcji. Aby kod był bardziej OOP można by zrobić wstrzykiwanie wrappera PDO do klasy obsługującej logowanie, w ten sposób przyszłości łatwiej będzie Ci to rozbudowywać i testować ten kod.
JanuszPHP
to niepotrzebne:
  1. $base = new base;

a to nielogiczne:
  1. class login extends base

właśnie tego tyczyła się rada Liona
Cytat(Lion @ 19.10.2016, 18:36:17 ) *
(...) Aby kod był bardziej OOP można by zrobić wstrzykiwanie wrappera PDO do klasy obsługującej logowanie, w ten sposób przyszłości łatwiej będzie Ci to rozbudowywać i testować ten kod.

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.