Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [skrypt] Logowanie
sebekzosw
post
Post #1





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


Witam!

Mam taki skrypt logowania opartego o sesje - moje pytanie brzmi: Czy taki skrypt jest bezpieczny?:

  1. <?php
  2. function DodawanieDoBazy($ciag) {
  3. $wynik = stripslashes(strip_tags(addslashes(trim($ciag))));
  4. $wynik = str_replace(array("\"", "'", "\\", '\"', "\'", "<", ">", "&nbsp;"), array("&quot;", "'", "\", "&quot;", "'", "&lt;", "&gt;", " "), $wynik);
  5. $wynik = preg_replace(array("/\=/","/\#/","/\sOR\s/"), "", $wynik);
  6. return $wynik;
  7. }
  8.  
  9.  
  10. if(isset($_POST["logowanie"]) && isset($_POST['login']) && isset($_POST['login'])) {
  11. $logon_failure = '';
  12. if(empty($_POST["login"])) { $logon_failure .= "Wpisz login<br />"; }
  13. if(empty($_POST["password"])) { $logon_failure .= "Wpisz hasło<br />"; }
  14. $login = DodawanieDoBazy($_POST["login"]);
  15. $password = md5($_POST["password"]);
  16.  
  17. if(empty($logon_failure)) {
  18. if(!mysql_fetch_row(mysql_query("SELECT * FROM users WHERE login='".$login."' AND pass='".$password."'"))) {
  19. $logon_failure .= "Nieprawidłowy login lub hasło";
  20. } elseif(!mysql_fetch_row(mysql_query("SELECT * FROM users WHERE login='".$login."' AND activity='1'"))) {
  21. $logon_failure .= "Konto jest nieaktywne";
  22. }
  23.  
  24. if(empty($logon_failure)) {
  25. $_SESSION["login"] = $login;
  26. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  27. $_SESSION['browser'] = $_SERVER['HTTP_USER_AGENT'];
  28. } else {
  29. echo $logon_failure;
  30. }
  31. } else {
  32. echo $logon_failure;
  33. }
  34. }
  35. echo "<div id=\"menu\">";
  36. if(UZYTKOWNIK) {
  37. echo "Zalogowany jako ".$_SESSION["login"];
  38. } else {
  39.  
  40.  
  41. ?>
  42. <form action="" method="post" id="logowanie">
  43. <fieldset>
  44. <dl>
  45. <dt>Login</dt>
  46. <dd><input type="text" name="login" id="login" value="Login" onblur="if(this.value=='') this.value='Login';" onfocus="if(this.value=='Login') this.value='';" /></dd>
  47.  
  48. <dt>Hasło:</dt>
  49. <dd><input type="password" name="password" id="password" value="Hasło" onblur="if(this.value=='') this.value='Hasło';" onfocus="if(this.value=='Hasło') this.value='';" /></dd>
  50. </dl>
  51. </fieldset>
  52. <div style="float:right;"><input type="submit" name="logowanie" value="Zaloguj się" onclick="WyslijFormularz('logowanie'); return false;" /></div>
  53. </form>
  54. <img src="http://test.php.pl/www/gfx/login_loading.gif" id="ladowanie" alt="" style="display:none;float:left;" />
  55. <div id="wynik"></div>
  56.  
  57. <p><a href="/rejestracja/">Rejestracja</a>
  58. <br />
  59. <a href="/przypomnij/">Przypomnij hasło</a>
  60.  
  61.  
  62. <?
  63. }
  64. ?>
  65. </div>


Wszystkie sugestie na temat polepszenia mile widziane (IMG:style_emoticons/default/smile.gif)

Ten post edytował erix 19.08.2009, 23:10:18
Powód edycji: [erix] przeniosłem
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sebekzosw
post
Post #2





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


Demo (Login: demo , Hasło: demo) - sprawdźcie bezpieczeństwo (IMG:style_emoticons/default/smile.gif)

a oto kod:

  1. <?php
  2. if(isset($_POST["logowanie"]) && isset($_POST["login"])) {
  3. $logon_failure = "";
  4. if(empty($_POST["login"]) OR $_POST["login"] == "Login") { $logon_failure .= "Wpisz login<br />"; }
  5. if(empty($_POST["password"]) OR $_POST["password"] == "Hasło") { $logon_failure .= "Wpisz hasło<br />"; }
  6. $login = mysql_real_escape_string($_POST["login"]);
  7. $password = sha1($_POST["password"]);
  8.  
  9. $users = mysql_fetch_assoc(mysql_query("SELECT * FROM users WHERE login='".$login."'"));
  10.  
  11. if(empty($logon_failure)) {
  12. if($users["pass"] != $password) {
  13. if($ustawienia["off_account"] == 1) {
  14. if($users["login_failed"] >= 3) {
  15. mysql_query("UPDATE users SET activity='0' WHERE login='".$login."' LIMIT 1"); //Deaktywacja konta po 3 błędnych próbach logowania
  16. $logon_failure = "Konto zostało zdeaktywowane, ponieważ liczba prób logowania była większa niż 3. Aby aktywować konto, kliknij <a href=\"\">tu</a>";
  17. } else {
  18. mysql_query("UPDATE users SET login_failed=login_failed+1, date_last_failed_login='".time()."' WHERE login='".$login."' LIMIT 1"); //Dodawanie +1 do obecnej liczby błędnych logowań
  19. $logon_failure .= "Nieprawidłowy login lub hasło";
  20. }
  21. } else {
  22. $logon_failure .= "Nieprawidłowy login lub hasło";
  23. }
  24. } elseif($users["activity"] == 0) {
  25. $logon_failure .= "Konto jest nieaktywne";
  26. }
  27.  
  28. if(empty($logon_failure)) {
  29. mysql_query("UPDATE users SET last_login='".$users["penultimate_login"]."', penultimate_login='".time()."', login_failed='0' WHERE id='".$users["id"]."' LIMIT 1"); //Aktualizacja danych o ostatnim logowaniu
  30. $_SESSION["login"] = $login;
  31. $_SESSION["ip"] = $_SERVER["REMOTE_ADDR"];
  32. $_SESSION["browser"] = $_SERVER["HTTP_USER_AGENT"];
  33. } else {
  34. echo $logon_failure;
  35. }
  36. } else {
  37. echo $logon_failure;
  38. }
  39. }
  40. echo "<div id=\"menu\">";
  41. if(UZYTKOWNIK) {
  42. echo "Zalogowany jako ".$_SESSION["login"];
  43. } else {
  44.  
  45.  
  46. ?>
  47. <form action="" method="post" id="logowanie">
  48. <fieldset>
  49. <dl>
  50. <dt>Login</dt>
  51. <dd><input type="text" name="login" id="login" value="Login" onblur="if(this.value=='') this.value='Login';" onfocus="if(this.value=='Login') this.value='';" /></dd>
  52.  
  53. <dt>Hasło:</dt>
  54. <dd><input type="password" name="password" id="password" value="Hasło" onblur="if(this.value=='') this.value='Hasło';" onfocus="if(this.value=='Hasło') this.value='';" /></dd>
  55. </dl>
  56. </fieldset>
  57. <div style="float:right;"><input type="submit" name="logowanie" value="Zaloguj się" onclick="sWyslijFormularz('logowanie'); return false;" /></div>
  58. </form>
  59. <img src="http://test.php.pl/www/gfx/login_loading.gif" id="ladowanie" alt="" style="display:none;float:left;" />
  60. <div id="wynik"></div>
  61.  
  62. <p><a href="/rejestracja/">Rejestracja</a>
  63. <br />
  64. <a href="/przypomnij/">Przypomnij hasło</a>
  65.  
  66.  
  67. <?
  68. }
  69. ?>
  70. </div>


Ograniczyłem się do 1 SELECT, ale nie mam pomysłu na 1 UPDATE. Jakieś propozycje polepszenia?
Go to the top of the page
+Quote Post

Posty w temacie
- sebekzosw   [skrypt] Logowanie   19.08.2009, 23:07:12
- - sniffer32   Cytat(sebekzosw)[PHP] pobierz, plaintext ie"]...   20.08.2009, 06:00:49
- - sebekzosw   Poprawiłem już to co mówiłem, tylko nie wiem gdzie...   20.08.2009, 08:30:28
|- - vonEverest   Cytat(sebekzosw @ 20.08.2009, 09:30:2...   23.08.2009, 15:19:17
- - sniffer32   1. wystarczy zajrzeć do manuala, przykład 3, widać...   21.08.2009, 13:26:57
- - sebekzosw   Trochę poprawiłem całe logowanie dodając nową opcj...   24.08.2009, 14:48:32
- - vonEverest   Może najpierw powiedz, jaką opcję dodałeś? ^^   26.08.2009, 21:29:19
- - sebekzosw   Deaktywacja konta po 3 błędnych próbach logowania   27.08.2009, 13:24:20
- - fifi209   [PHP] pobierz, plaintext $wynik = stripslashes...   27.08.2009, 13:40:19
- - l0ud   Cześć Cała funkcja DodawanieDoBazy() jest zupełni...   27.08.2009, 13:48:02
|- - fifi209   Cytat(l0ud @ 27.08.2009, 13:48:02 ) C...   27.08.2009, 13:50:19
- - l0ud   CytatPo prostu to sobie daruj takie posty. Napisa...   27.08.2009, 14:06:29
|- - fifi209   Cytat(l0ud @ 27.08.2009, 14:06:29 ) M...   27.08.2009, 14:09:12
- - l0ud   Tak, o 7 minut. Co do htmlspecialchars, robiła to ...   27.08.2009, 14:23:49
|- - fifi209   Dyskusja jest też na temat. Napisałeś, przy wyrz...   27.08.2009, 14:52:49
- - l0ud   Daje możliwość bezproblemowej edycji i wyświetleni...   27.08.2009, 16:05:07
- - klocu   A tak właściwie to czy jest sens bombardować bazę ...   28.08.2009, 09:18:11
- - phpion   Cytat(klocu @ 28.08.2009, 10:18:11 ) ...   28.08.2009, 09:24:55
- - sebekzosw   Demo (Login: demo , Hasło: demo) - sprawdźcie bezp...   29.08.2009, 12:46:37


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.03.2026 - 20:08