Deusald (Adamentium) Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 Witam:) Mam pewien problem. Utworzyłem w MySQL tabelę o nazwie Logowanie. Są dwie kolumny: nazwa i haslo. W nazwie jest nazwa użytkownika "Admin" a w haslo jest hasło "test". No i mam taki skrypt: <?php if(!isset($HTTP_POST_VARS['nazwa'])&&!isset($HTTP_POST_VARS['haslo'])) { //Użytkownik musi podać identyfikator i hasło dostępu ?> <h1>Zaloguj się</h1> Ta strona jest zastrzeżona. <form method = "post" action = "zastrz_baza.php"> <table border = "1"> <tr> <th> Użytkownik </th> <td> <input type = "text" name = "nazwa"> </td> </tr> <tr> <th> Hasło </th> <td> <input type = "password" name = "haslo"> </td> </tr> <tr> <td colspan = "2" align = "center"> <input type = submit value = "Zaloguj się"> </td> </tr> </form> <?php } else { // połącz sie z MySQL $mysql_host = "mysql.cba.pl"; $mysql_login = "Adamentium"; $mysql_haslo = "*******"; $mysql_baza = "thespiderstudio_cba_pl"; $mysql = mysql_connect($mysql_host, $mysql_login, $mysql_haslo); if(!$mysql) { echo 'Brak połączenia z bazą danych.'; exit; } // wybierz właściwą bazę danych $mysql = mysql_select_db($mysql_baza); if(!$mysql) { echo 'Błąd wyboru bazy danych.'; exit; } // znajdź pasujący wiersz $zapytanie = "select count(*) from Logowanie where nazwa = '$nazwa' and haslo = '$haslo'"; $wynik = mysql_query( $zapytanie ); if(!$wynik) { echo 'Nie można wykonać zapytania.'; exit; } $ile = mysql_result( $wynik, 0, 0 ); if ( $ile > 0 ) { // podana kombinacja: identyfikator i hasło jest prawidłowa echo '<h1>Oto ona!</h1>'; echo 'Na pewno jesteś szczęśliwy, że możesz zobaczyć tę stronę.'; } else { // kombinacja: identyfikator i hasło dostępu jest nieprawidłowa echo '<h1>Odejdź stąd!</h1>'; echo 'Nie jesteś uprawniony do przeglądania tych zasobów.'; } } ?> No i problem jest taki, że nawet jeżeli wpiszę login i hasło dobre to pokazuje mi, że jest zła kombinacja. Bardzo prosze o pomoc. Pozdrawiam Adamentium Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 HTTP_POST_VARS to przeżytek. Gdzie przypisujesz $nazwa i $haslo? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawka83 Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 Według mnie ten kod: select count(*) from Logowanie where nazwa = '$nazwa' and haslo = '$haslo' Jest całkowicie błędy. Zobacz jak to powinno wyglądać: http://webmade.org/kursy-online/mysq_fetch...-kurs-mysql.php Choć to pewnie tylko moje przyzwyczajenie :) Edit: Tymon dobrze gada teraz jest $_POST['input_name'] :P Z kąt ty wziąłeś ten kod? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 Jest dobry, ale podatny na MySQL injection. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 Edit: Tymon dobrze gada teraz jest $_POST['input_name'] Z kąt ty wziąłeś ten kod?A teraz mnie oświeć jak to się ma do tego o czym napisał Tymon :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawka83 Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 $HTTP_POST_VARS['nazwa'] zamieniło się na $_POST['nazwa'] :P Proste? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Deusald (Adamentium) Opublikowano 26 Września 2010 Autor Udostępnij Opublikowano 26 Września 2010 Zmieniłem: <?php if(!isset($_POST['nazwa'])&&!isset($_POST['haslo'])) { //Użytkownik musi podać identyfikator i hasło dostępu ?> Ale i tak dalej po poprawnym wpisaniu loginu i hasła nie działa. Wyświetla się strona niepoprawnej kombinacji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 Gdzie przypisujesz $nazwa i $haslo?Jeszcze raz. Skąd bierzesz te zmienne? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Deusald (Adamentium) Opublikowano 26 Września 2010 Autor Udostępnij Opublikowano 26 Września 2010 $nazwa i $haslo wpisuje użytkownik w formularzu logowania. A porównywane jest z tabeli z bazy danych. Pierwsza linijka ma sprawdzać czy użytkownik coś wpisał. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 między $_POST['nazwa'] a $nazwa jest jednak różnica, nigdzie zmiennej 'nazwa' nie przypisujesz wartości ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Września 2010 Administratorzy Udostępnij Opublikowano 26 Września 2010 Inaczej. Gdzie masz $nazwa = <wartosc>; dodaj sobie error_reporting(E_ALL | E_STRICT) na początku i się dowiesz co masz źle Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Deusald (Adamentium) Opublikowano 26 Września 2010 Autor Udostępnij Opublikowano 26 Września 2010 Wyświetliło się, że nie mam zadeklarowanych zmiennych nazwa i haslo. Dodałem wiec na początku: $nazwa="nic"; $haslo="nic"; Ale dalej to samo :boxed: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawka83 Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 A oto i mój system logowania: <?php $_GET['id']; //Formularz if (isset($id)==false) { echo '<form id="logowanie" method="POST" action="site.php?id=login"> <input type="text" name="login"/><br/> <input type="password" name="pass"/><br/> <button type="submit">Loguj</button> </form>'; } else if ($id=="login") { $login=$_POST['login']; $pass=$_POST['pass']; $zmienne = mysql_query("select * from `user` WHERE login='$login' AND pass='$pass'"); $dane=mysql_fetch_array($zmienne); if (isset($dane['login'])){ echo 'Zostałeś zalogowany!'; } else { echo "Błędny login lub hasło!"; } } ?> Musisz jeszcze dodać łączenie z bazą i pozmieniać w mysql_query Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 To nie system a jedynie sprawdzenie czy użytkownik istnieje ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Września 2010 Administratorzy Udostępnij Opublikowano 26 Września 2010 Raczej !empty, bo isset zwraca też true dla pustego stringa (czyli dla ''). Co do niezadeklarowanych to raz, a dwa, może być kiedyś przypisał login i hasło do tych zmiennych jak chcesz ich użyć? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawka83 Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 A powiedz mi czy to nie to samo? Gnysek: A tu się zdziwisz isset dal '' zwraca false :) Wiem z własnego doświadczenia :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 26 Września 2010 Udostępnij Opublikowano 26 Września 2010 <?php if(!isset($HTTP_POST_VARS['nazwa'])&&!isset($HTTP_POST_VARS['haslo'])) { //Użytkownik musi podać identyfikator i hasło dostępu ?> <h1>Zaloguj się</h1> Ta strona jest zastrzeżona. <form method = "post" action = "zastrz_baza.php"> <table border = "1"> <tr> <th> Użytkownik </th> <td> <input type = "text" name = "nazwa"> </td> </tr> <tr> <th> Hasło </th> <td> <input type = "password" name = "haslo"> </td> </tr> <tr> <td colspan = "2" align = "center"> <input type = submit value = "Zaloguj się"> </td> </tr> </form> <?php } else { // połącz sie z MySQL $mysql_host = "mysql.cba.pl"; $mysql_login = "Adamentium"; $mysql_haslo = "*******"; $mysql_baza = "thespiderstudio_cba_pl"; $mysql = mysql_connect($mysql_host, $mysql_login, $mysql_haslo); if(!$mysql) { echo 'Brak połączenia z bazą danych.'; exit; } // wybierz właściwą bazę danych $mysql = mysql_select_db($mysql_baza); if(!$mysql) { echo 'Błąd wyboru bazy danych.'; exit; } // o to dodane!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $nazwa = $HTTP_POST_VARS['nazwa']; $haslo = $HTTP_POST_VARS['haslo']; // znajdź pasujący wiersz $zapytanie = "select count(*) from Logowanie where nazwa = '$nazwa' and haslo = '$haslo'"; $wynik = mysql_query( $zapytanie ); if(!$wynik) { echo 'Nie można wykonać zapytania.'; exit; } $ile = mysql_result( $wynik, 0, 0 ); if ( $ile > 0 ) { // podana kombinacja: identyfikator i hasło jest prawidłowa echo '<h1>Oto ona!</h1>'; echo 'Na pewno jesteś szczęśliwy, że możesz zobaczyć tę stronę.'; } else { // kombinacja: identyfikator i hasło dostępu jest nieprawidłowa echo '<h1>Odejdź stąd!</h1>'; echo 'Nie jesteś uprawniony do przeglądania tych zasobów.'; } } ?> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Września 2010 Administratorzy Udostępnij Opublikowano 26 Września 2010 isset zwraca czy wartość jest ustawiona (is = jest, set = ustawiony), więc zwraca czy dana zmienna istnieje (variable_exists w GM), a empty sprawdza czy ma wartosc i zwraca false także dla 0, NULL, FALSE, array() itp. http://php.net/manual/en/function.isset.php $var = ''; // This will evaluate to TRUE so the text will be printed. if (isset($var)) { echo "This var is set so I will print."; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Deusald (Adamentium) Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 Dzięki Tymon. Już działa. Pytaliście skąd to mam. To jest po części przykład z książki trochę zmodyfikowany. Ta książka jest z biblioteki i jest tam php 4.3.0 Dlatego były tam $HTTP_POST_VARS['nazwa']. Napisali, że lepiej zadeklarować długą nazwą, więc tak zrobiłem. EDIT: Czy dodacie funkcji addslashes() zabezpieczy przed MySQL injection? Czyli zmieniłem tak: $nazwa = $_POST['nazwa']; $haslo = $_POST['haslo']; addslashes($nazwa); addslashes($haslo); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 27 Września 2010 Administratorzy Udostępnij Opublikowano 27 Września 2010 A nie $nazwa = addslashes($nazwa); ? Owszem, zabezpieczy, ale nie całkowicie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Deusald (Adamentium) Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 A co jeszcze można by zrobić? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 27 Września 2010 Administratorzy Udostępnij Opublikowano 27 Września 2010 $name = preg_replace('/[^a-zA-Z0-9_]/','',$name); pozostawia tylko litery a-z, A-Z oraz znak _ w nicku Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Deusald (Adamentium) Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 Dzięki :thumbsup: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Deusald (Adamentium) Opublikowano 29 Września 2010 Autor Udostępnij Opublikowano 29 Września 2010 Mam jeszcze jedno pytanie. Podczas łączenia się z bazą funkcją mysql_connect() trzeba podać hasło. W moim skrypcie hasło jest w zmiennej i jest otwartym tekstem. Czy osoby logujące się za pomocą tego skryptu mogą jakoś podejrzeć hasło zapisane w zmiennej? Jeśli tak to jak można je zabezpieczyć? EDIT: Przepraszam za duble posta :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawka83 Opublikowano 29 Września 2010 Udostępnij Opublikowano 29 Września 2010 Nie nie mogą go zobaczyć. Ale i tak lepiej sobie zrobić osobny plik (config.php) i go sobie na każdej stronie includowac. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Deusald (Adamentium) Opublikowano 29 Września 2010 Autor Udostępnij Opublikowano 29 Września 2010 To dobrze, że nie mogą zobaczyć. Wielkie dzięki :thumbsup: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 29 Września 2010 Administratorzy Udostępnij Opublikowano 29 Września 2010 Jak serwer przestanie interpretować pliki .php bo ma awarię, zobaczą tylko tekst. Rozwiązanie 2 jest lepsze, ale inną nazwę pliku proponuję, dla utrudnienia. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawka83 Opublikowano 29 Września 2010 Udostępnij Opublikowano 29 Września 2010 I tak jak się ustawi odpowiednie atrybuty to nic nie zrobią :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 29 Września 2010 Administratorzy Udostępnij Opublikowano 29 Września 2010 Powiem lepiej. Plik z konfiguracją powinien lądować nie w katalogu public_html, a ponad nim. Wtedy taki plik nie jest absolutnie do odczytania z poziomu www (poza dziurawym skryptem czytającym katalogi, no ale to już kwestia zaprogramowania). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawka83 Opublikowano 29 Września 2010 Udostępnij Opublikowano 29 Września 2010 Hmm nie wiedziałem że skrypty mogą czytać pliki z ponad public_html. Chyba sam zastosuje się do tej rady :D. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się