Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Logowanie, Skomplikowany błąd
MateuszS
post 20.03.2009, 17:47:43
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Witam. Miałem skrypt bez bazy, jednak po dodaniu bazy danych musiałem go przerobić, słabo mi to wyszło bo coś nie działa za bardzo, cały czas złe hasło, przerabiałem go jak się da, dorabiałem itd i mam

  1. <?php
  2. if($_GET['opcja']=='logowanie') {
  3. $logineczek = $_POST['login'];
  4. $haseleczko = $_POST['haslo'];
  5. $cohaseleczko = sha1($haseleczko);
  6. $inv = mysql_query("SELECT `username`,`sha_pass_hash` FROM `account` WHERE username='$logineczek' AND sha_pass_hash='$cohaseleczko'");
  7. $rowek = mysql_fetch_assoc($inv);
  8.  
  9. if($logineczek == $rowek['username'] and $cohaseleczko == $rowek['sha_pass_hash']) {
  10. $_SESSION['log'] = '1234592';
  11. echo '<script language="JavaScript">window.location="store.php?id=17&opcja=panel";</script>';
  12. } elseif ((!empty($_POST['login']) or !empty($_POST['haslo'])) and ($rowek['username'] != $_POST['login'] or $rowek['sha_pass_hash'] != $cohaseleczko)) {
  13. echo '<center><br /><font color="red">Zły login lub hasło</font></center>'; }
  14.    if($_SESSION['log'] == '1234592') {
  15.    echo '<b><a href="store.php?id=17&opcja=panel">PANEL</a></b>';
  16.    }
  17. echo '<form method="POST">
  18.      <b><center>Zaloguj się na konto serwerowe: </b><br />';
  19. echo '<p>Login: <input type="text" size="15" name="login" /></p>
  20.      <p>Hasło: <input type="password" size="15" name="haslo" /></p>
  21.      <p><input type="submit" value="Zaloguj" name="Zaloguj" />';
  22.  
  23. }
  24. ?>


Nie wiem co jest źle bo nie loguje do bazy...


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
Spawnm
post 20.03.2009, 17:49:36
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




  1. <?php
  2. if($_GET['opcja']=='logowanie') {
  3. $logineczek = $_POST['login'];
  4. ?>

wysyłasz post , a chcesz odebrać get

//edit,
kod bez sensu tongue.gif
podatny na sql injection

Ten post edytował Spawnm 20.03.2009, 17:51:09
Go to the top of the page
+Quote Post
Fifi209
post 20.03.2009, 17:51:06
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Polecam otworzyć połączenie:
mysql_connect();" title="Zobacz w manualu PHP" target="_manual
i wybrać bazę
mysql_select_db();" title="Zobacz w manualu PHP" target="_manual


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
mls
post 20.03.2009, 17:51:27
Post #4





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

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


Cytat(Spawnm @ 20.03.2009, 17:49:36 ) *
wysyłasz post , a chcesz odebrać get


A co ma piernik do wiatraka, że tak to ujmę? POST i GET mogą iść jednocześnie i w tym konkretnym przypadku zapewne tak jest.

Moim pytaniem jest więc - czy to cały skrypt, czy jego część? Czy jest w nim w ogóle połączenie się z bazą danych? Jaki konkretnie błąd zwraca skrypt?


--------------------
Go to the top of the page
+Quote Post
MateuszS
post 20.03.2009, 17:55:24
Post #5





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Polaczenie z baza jest OK. Mysle ze tu chodzi o hashowanie sha1. Poniewaz gdy je usunę, zmienie w bazie to i owo zeby nie bylo hasla hashowanego wszystko dziala ale po dodaniu hasha wszystko sie wali. Tabela ma nazwe sha_pass_hash jak zauwazyliscie (ja jej nie tworzylem) wiec chyba sha1 jest kodowanie. Teraz wywala caly czas ze zle haslo lub login

Tak to czesc wiekszego skryptu (jego poczatek)

PS prosze tez o rady jak go od SQL INj ochronic

Ten post edytował MateuszScirka 20.03.2009, 17:56:41


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
Fifi209
post 20.03.2009, 18:00:41
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


To pokaż nam przykładowy rekord z tabeli z hashami... jej nazwa nie musi mieć nic do zawartości.
Przy zapisywaniu i tak trzeba zapisać jako hash.

@edit
Co do zabezpieczeń przed SQLi, mysql_real_escape_string" title="Zobacz w manualu PHP" target="_manual, addslashes" title="Zobacz w manualu PHP" target="_manual

Ten post edytował fifi209 20.03.2009, 18:02:49


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
MateuszS
post 20.03.2009, 18:05:36
Post #7





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


  1. -- phpMyAdmin SQL Dump
  2. -- version 3.1.3
  3. --
  4. -- Host: localhost
  5. -- Czas wygenerowania: 20 Mar 2009, 18:04
  6. -- Wersja serwera: 5.0.67
  7. -- Wersja PHP: 5.2.6
  8.  
  9. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  10.  
  11.  
  12. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  13. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  14. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  15. /*!40101 SET NAMES utf8 */;
  16.  
  17. --
  18. -- Baza danych: `realmd`
  19. --
  20.  
  21. -- --------------------------------------------------------
  22.  
  23. --
  24. -- Struktura tabeli dla `account`
  25. --
  26.  
  27. CREATE TABLE IF NOT EXISTS `account` (
  28. `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Identifier',
  29. `username` varchar(32) NOT NULL DEFAULT '',
  30. `sha_pass_hash` varchar(40) NOT NULL DEFAULT '',
  31. `gmlevel` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  32. `sessionkey` longtext,
  33. `v` longtext,
  34. `s` longtext,
  35. `email` varchar(320) NOT NULL DEFAULT '',
  36. `joindate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  37. `last_ip` varchar(30) NOT NULL DEFAULT '127.0.0.1',
  38. `failed_logins` int(11) UNSIGNED NOT NULL DEFAULT '0',
  39. `locked` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  40. `last_login` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  41. `online` tinyint(4) NOT NULL DEFAULT '0',
  42. `expansion` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  43. `mutetime` bigint(40) UNSIGNED NOT NULL DEFAULT '0',
  44. `locale` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  45. PRIMARY KEY (`id`),
  46. UNIQUE KEY `idx_username` (`username`),
  47. KEY `idx_gmlevel` (`gmlevel`)
  48. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Account System' AUTO_INCREMENT=5 ;
  49.  
  50. --
  51. -- Zrzut danych tabeli `account`
  52. --
  53.  
  54. INSERT INTO `account` (`id`, `username`, `sha_pass_hash`, `gmlevel`, `sessionkey`, `v`, `s`, `email`, `joindate`, `last_ip`, `failed_logins`, `locked`, `last_login`, `online`, `expansion`, `mutetime`, `locale`) VALUES
  55. (1, 'ADMINISTRATOR', 'a34b29541b87b7e4823683ce6c7bf6ae68beaaac', 3, '', '0', '0', '', '2006-04-25 12:18:56', '127.0.0.1', 0, 0, '0000-00-00 00:00:00', 0, 0, 0, 0),
  56. (2, 'GAMEMASTER', '7841e21831d7c6bc0b57fbe7151eb82bd65ea1f9', 2, '', '0', '0', '', '2006-04-25 12:18:56', '127.0.0.1', 0, 0, '0000-00-00 00:00:00', 0, 0, 0, 0),
  57. (3, 'MODERATOR', 'a7f5fbff0b4eec2d6b6e78e38e8312e64d700008', 1, '', '0', '0', '', '2006-04-25 12:19:35', '127.0.0.1', 0, 0, '0000-00-00 00:00:00', 0, 0, 0, 0),
  58. (4, 'player', 'player', 0, '', '0', '0', '', '2006-04-25 12:19:35', '127.0.0.1', 0, 0, '0000-00-00 00:00:00', 0, 0, 0, 0);


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
artur_dziocha
post 20.03.2009, 18:14:09
Post #8





Grupa: Zarejestrowani
Postów: 320
Pomógł: 53
Dołączył: 18.09.2007
Skąd: Radom

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


wyświtl sobie tablice $_POST, zahashowane hasło, może błędy w zapytaniu
  1. <?php
  2. $query = mysql_query($sql) or die(mysql_error());
  3. ?>
Go to the top of the page
+Quote Post
MateuszS
post 20.03.2009, 18:35:02
Post #9





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


nie tego wina sad.gif cos z kodowaniem... albo skladnia nie wiem


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
artur_dziocha
post 20.03.2009, 18:42:58
Post #10





Grupa: Zarejestrowani
Postów: 320
Pomógł: 53
Dołączył: 18.09.2007
Skąd: Radom

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


ale wyświetliłeś i porównałeś z baza??jakieś błędy wyskakująquestionmark.gif
Go to the top of the page
+Quote Post
thomson89
post 20.03.2009, 18:51:47
Post #11





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


Może sie mylę mozę źle radzę.

Myślę ze kodujesz w inny sposób a hasło do porównania też w inny. Ale mogę się mylić.

Też kiedyś miałem logowanie jednego użytkownika, potem przeniosłem to na bazę, a potem dałem hashowanie i dluuuugo mi nie działało.

Kod
za pomocą echo sha1('tajnehaslo'); brałem shasowaną wersję hasła
dalej ręcznie kopiowałem to do bazy, update
i wpisywałem tajnehaslo w formularz


Miałem wtedy tylko jeden wiersz w tabeli, takze w koncu doszedłem co tam było. No, ale teraz nie pamiętam.


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
MateuszS
post 20.03.2009, 22:09:24
Post #12





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


To moze ktos pozmienia ten skrypt, bo dosc chaotyczny jest


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
erix
post 20.03.2009, 22:14:37
Post #13





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




To może przepiszesz go zgodnie ze wskazówkami? Na ogłoszenia/zlecenia jest odpowiedni dział.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
thomson89
post 21.03.2009, 09:46:02
Post #14





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


Ja bym to zrobił inaczej.
  • Sprawdzamy wypełnienie formularza
  • Łączymy się z bazą
  • Ustawiamy krótkie zmienne
  • Hashujemy hasło sha1
  • Sprawdzamy czy jest taki uzytkownik:
    1. SELECT * FROM userzy WHERE nazwa=login AND haslo=cohaslo
  • Wynik przepuszczamy przez num rows
  • Jeżeli wynik<1 & wynik>2 błąd
  • Jeżeli wynik = 1 mozemy zalogować uzytkownika

Wczesniej zrób to co napisałe post wczesniej i pórbuj aż ci wyjdzie.


Cytat(MateuszScirka @ 20.03.2009, 22:09:24 ) *
To moze ktos pozmienia ten skrypt, bo dosc chaotyczny jest


Dlatego twórcy php, i nie tylko umożliwili dodawanie komentarzy, wcięć enterów, odstępów, tab, spacji itp. itd.

  1. <?php
  2. //*****************//
  3. // WAZNACZYNNOSC //
  4. //*****************//
  5.  
  6.                                                         //jakies objasnienie
  7.  
  8. //teraz robie to
  9.  
  10. /a tutaj zmieniam to na to
  11. ?>


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
MateuszS
post 30.03.2009, 17:20:52
Post #15





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Napisałem własne

  1. <?php
  2. if($_GET['opcja']=='logowanie') {
  3. $user = mysql_real_escape_string($_POST['login']);
  4. $pass = mysql_real_escape_string(sha1($_POST['password']));
  5. $query=mysql_query("SELECT id,username,sha_pass_hash FROM `account`
  6.                    WHERE username='$user' AND sha_pass_hash='$pass' ");
  7.    if($query) {
  8.    $_SESSION['log'] = '1234592';
  9.    header("Location: store.php?id=17&opcja=panel");
  10.    } else {
  11.    echo 'Złe dane.';
  12.    }
  13.                    
  14.    
  15.  
  16.  
  17. }
  18. ?>


Jednak zawsze mnie przenosi do panelu ^^


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
Fifi209
post 30.03.2009, 18:03:50
Post #16





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Gdyż w zmiennej $query zawsze coś jest;d

Daj tam zamiast $query
$dane = mysql_fetch_assoc($query)


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
MateuszS
post 5.04.2009, 10:43:45
Post #17





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


To znowu ja. Wiem na czym polega problem. Otóż: hasło które koduję i porównuję nie jest identyczne z tym które mam w bazie. Oto kod:

  1. <?php
  2. $login = $_POST['login'];
  3. $haslo = sha1($_POST['password']);
  4.  
  5. $query = mysql_query("SELECT * FROM `account`") or die(mysql_error());
  6. $wynik = mysql_fetch_assoc($query);
  7.  
  8. if($login == $wynik['username'] && $haslo == $wynik['sha_pass_hash']) {
  9. echo 'Zalogowany';
  10. } else {
  11. echo 'Nie zalogowany';
  12. echo '<br /><br />';
  13. echo $wynik['username'] . '<br />' . $login . '<br />' . $wynik['sha_pass_hash'] . '<br />' . $haslo;
  14. }
  15. ?>


Login: ADMINISTRATOR hasło: administrator
Oto moje porównanie:
Kod
Nie zalogowany

ADMINISTRATOR
ADMINISTRATOR
a34b29541b87b7e4823683ce6c7bf6ae68beaaac
b3aca92c793ee0e9b1a9b0a5f5fc044e05140df3



JAk to naprawić?

Ten post edytował MateuszScirka 5.04.2009, 10:44:05


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
decha-design
post 5.04.2009, 10:48:03
Post #18





Grupa: Zarejestrowani
Postów: 415
Pomógł: 46
Dołączył: 26.05.2007
Skąd: Sandomierz

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


jakim cudem hash sha1 z ADMINISTRATOR jest a34b29541b87b7e4823683ce6c7bf6ae68beaaac jak ja mam 25c5d184fd3c8e7d24af0e237c061f5480a5e86e ... o.O'

Ja nie wiem co ty tam robisz ...

Ten post edytował decha-design 5.04.2009, 10:48:23


--------------------
Go to the top of the page
+Quote Post
MateuszS
post 5.04.2009, 11:10:55
Post #19





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


napisałem przecież że hash z administrator a nie ADMINISTRATOR


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
thomson89
post 5.04.2009, 12:55:00
Post #20





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


Cytat(thomson89 @ 20.03.2009, 19:51:47 ) *
Myślę ze kodujesz w inny sposób a hasło do porównania też w inny. Ale mogę się mylić.

Cytat(MateuszScirka @ 5.04.2009, 11:43:45 ) *
To znowu ja. Wiem na czym polega problem. Otóż: hasło które koduję i porównuję nie jest identyczne z tym które mam w bazie. Oto kod:


A nie mówiłem?


--------------------
Sklep 70%
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 07:57