Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [php][mysql]skrypt logowania-kilka pytań, pytania odnośnie tego kodu
predator
post 15.04.2008, 17:28:23
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


Przerobiłem troche znaleziony w internecie kod i wygląda on następująco:

index.php
  1. <?php
  2.  
  3. $login = $_POST["login"];
  4. $haslo = $_POST["haslo"];
  5.  
  6.  
  7. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  8.  
  9. mysql_connect("", "", "")or die("Nie można nawiązać połączenia z bazą");
  10. mysql_select_db("")or die("Wystąpił błąd podczas wybierania bazy danych");
  11.  
  12. function ShowLogin($komunikat=""){
  13. echo "$komunikat<br>";
  14. echo "<form action='index.php' method=post>";
  15. echo "Login: <input type=text name=login><br>";
  16. echo "Hasło: <input type=text name=haslo><br>";
  17. echo "<input type=submit value='Zaloguj!'>";
  18. echo "</form>";
  19. echo "Jeśli nie jesteś zarejestrowany, <a href='rejestruj.php'>tu znajdziesz formularz</a>";
  20. }
  21.  
  22. ?>
  23. <!DOCTYPE html 
  24. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
  25.  <html>
  26. <head>
  27. <title>logowanie</title>
  28. </head>
  29. <body>
  30. <?php
  31. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany";}
  32. if($_SESSION["zalogowany"]!=1){
  33. if(!empty($login) && !empty($haslo)){
  34. {
  35. if(preg_match('#^[A-Za-z0-9_-]+$#', $login)){
  36.  
  37.  
  38. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($login)."' AND user_haslo = '".htmlspecialchars(md5($haslo))."'"))){
  39. echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
  40. $_SESSION["zalogowany"]=1;
  41. $_SESSION['nick'] = htmlspecialchars($login);
  42. } 
  43. else echo ShowLogin("zle haslo!!!");
  44.  
  45. }
  46. else echo ShowLogin("nie dozwolone znaki");
  47. }
  48.  
  49. }
  50. else ShowLogin();
  51. }
  52. else{
  53. ?>
  54. Zalogowałeś się pomyślnie!
  55. <br><a href='index.php?wyloguj=tak'>wyloguj się</a>
  56. <?php
  57. }
  58. ?>
  59.  
  60. </body>
  61.  </html>
  62. <?php mysql_close(); ?>


rejestruj.php
  1. <?php
  2. mysql_connect("", "", "")or die("Nie można nawiązać połączenia z bazą"); //połączenie z bazą danych
  3. mysql_select_db("")or die("Wystąpił błąd podczas wybierania bazy danych");
  4.  
  5. $login = $_POST["login"];
  6. $haslo = $_POST["haslo"];
  7.  
  8. function ShowForm($komunikat=""){ //funkcja wyświetlająca formularz rejestracyjny
  9. echo "$komunikat<br>";
  10. echo "<form action='rejestruj.php' method=post>";
  11. echo "Login: <input type=text name=login><br>";
  12. echo "Hasło: <input type=text name=haslo><br>";
  13. echo "<input type=hidden value='1' name=send>";
  14. echo "<input type=submit value='Zarejestruj'>";
  15. echo "</form>";
  16. }
  17. ?>
  18. <!DOCTYPE html 
  19. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
  20.  <html>
  21. <head>
  22. <title>Formularz rejestracyjny</title>
  23. </head>
  24. <body>
  25. <?php
  26. if($_POST["send"]==1){ //sprawdzanie czy formularz został wysłany
  27. if(!empty($login) && !empty($haslo)) //oraz czy uzupełniono wszystkie dane
  28.  
  29. {
  30. if(preg_match('#^[A-Za-z0-9_-]+$#', $login)){ //sprawdzenie poprawnosci znaków
  31.  
  32. if(mysql_num_rows(mysql_query("select * from users where user_login='".htmlspecialchars($login."'"))))ShowForm("Użytkownik o podanym loginie już istnieje!!!");// sprawdzanie czy użytkownik o podanej nazwie już istnieje
  33. else 
  34. {
  35. mysql_query("insert into users values(NULL, '".htmlspecialchars($login)."', '".htmlspecialchars(md5($haslo))."')"); // zapisywanie rekordu do bazy
  36. echo "Rejestracja przebiegła pomyślnie. Możesz teraz przejść do <a href='index.php'>strony głównej</a> i się zalogować.";
  37. }
  38. }
  39. else ShowForm("nie dozwolone znaki");
  40. }
  41.  
  42. else ShowForm("Nie uzupełniono wszystkich pól!!!");
  43. }
  44. else ShowForm();
  45. mysql_close(); //zamykanie połączenia z bazą
  46. ?>
  47. </body>
  48. </html>


1. czy jest ten skrypt bezpieczny? jeśli nie to jakie zmiany proponujecie
2. jak zabezpieczyć najlepiej w md5() hasło do bazy danych?
  1. <?php
  2. mysql_connect("", "", "")or die("Nie można nawiązać połączenia z bazą");
  3. mysql_select_db("")or die("Wystąpił błąd podczas wybierania bazy danych");
  4. ?>

3. użyłem funkcji preg_match do zabezpieczenia formularza ale działa on tylko dla jednej zmiennej $login lub $haslo:
  1. <?php
  2. if(preg_match('#^[A-Za-z0-9_-]+$#', $login))
  3. ?>

gdy próbuje napisać tak(by obydwa pola formularza zabezpieczyć, bo co mi da że pole loginu zabezpiecze tylko jeśli w polu hasła można wpisać co sie chce..):
  1. <?php
  2. if(preg_match('#^[A-Za-z0-9_-]+$#', $login, $haslo))
  3. ?>

to pojawia sie błąd.

jak tego użyć by zabezpieczyć obydwa pola?

PS nie mam pojęcia dlaczego nie koloruje składni :/ być może kod html to powoduje ale nie wiem...

Ten post edytował predator 16.04.2008, 16:35:51
Go to the top of the page
+Quote Post
erix
post 16.04.2008, 09:06:49
Post #2





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




  1. Zamiast htmlentities" title="Zobacz w manualu PHP" target="_manual w zapytaniu lepiej użyj mysql_escape_string" title="Zobacz w manualu PHP" target="_manual.
  2. Musisz gdzieś podać hasło "surowe", inaczej się nie połączy. Wyłącz raportowanie błędów, postaraj się uniemożliwić dostęp do podglądu źródła skryptu.
  3. Poczytaj o preg_match" title="Zobacz w manualu PHP" target="_manual.


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

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
predator
post 16.04.2008, 11:07:16
Post #3





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


Cytat
Poczytaj o preg_match

Szukałem długo jak zrobić, kombinowałem ale nic... I dlatego tu napisałem.

Cytat
Musisz gdzieś podać hasło "surowe", inaczej się nie połączy. Wyłącz raportowanie błędów, postaraj się uniemożliwić dostęp do podglądu źródła skryptu.


Użyje require() ale gdzie dać ten plik includowany jeśli adres strony z logowaniem to www.jakas_strona.pl/index.php ?

Katalog tego pliku powinien być wyżej niż index.php ale wyżej sie nie da chyba.

Cytat
Zamiast htmlentities w zapytaniu lepiej użyj mysql_escape_string.

Dlaczego uważasz że takie rozwiązanie lepsze?

PS Wstawiam na początku error_reporting(0); by nie wyświetlało błędów i nie ma reakcji na tę funkcję, errory dalej sie pojawiają.
Wstawiałem na początku przed session_start(), wstawiałem też przed tą linią:
  1. <?php
  2. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany";}
  3. ?>


i nie działa

Ten post edytował predator 16.04.2008, 16:37:39
Go to the top of the page
+Quote Post
erix
post 16.04.2008, 15:21:40
Post #4





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




Cytat
Szukałem długo jak zrobić, kombinowałem ale nic... I dlatego tu napisałem.

preg_match" title="Zobacz w manualu PHP" target="_manual za jednym razem może sprawdzać tylko jedną zmienną. Musisz dodać kolejne ify dla kolejnych pól.

Cytat
Katalog tego pliku powinien być wyżej niż index.php ale wyżej sie nie da chyba.

Da się, jeśli masz po zalogowaniu do ftp masz katalog public_html. Tylko najlepiej posługuj się ścieżkami bezwzględnymi.

Cytat
Dlaczego uważasz że takie rozwiązanie lepsze?

Poczytaj o SQL Injection.

Cytat
errory dalej sie pojawiają.

Tzn, jakie?

Cytat
PS nie mam pojęcia dlaczego nie koloruje składni :/ być może kod html to powoduje ale nie wiem...

Zamiast tagu [ code] używaj [ php]

Ten post edytował erix 16.04.2008, 15:23:00


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

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
predator
post 16.04.2008, 16:52:05
Post #5





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


Cytat
Da się, jeśli masz po zalogowaniu do ftp masz katalog public_html. Tylko najlepiej posługuj się ścieżkami bezwzględnymi.


Nie mam takiego katalogu sadsmiley02.gif . Jak inaczej zabezpieczyć?

Cytat
Poczytaj o SQL Injection.

Ale po zabezpieczeniu formularza (tak że po wprowadzeniu czego innego niż litery i cyfry zamiast przystępować do logowania pokazuje sie informacja) nie da sie chyba zastosowac SQL Injection.
Bo najpierw jest sprawdzana poprawnosc:
Kod
if(preg_match('#^[A-Za-z0-9_-]+$#', $login))



Cytat
Cytat
errory dalej sie pojawiają.

Tzn, jakie?

Np. specjalnie wpisuje więcej znaków } i pojawia sie błąd:
Kod
Parse error:  syntax error, unexpected '}'

a nie powinien przecież po zastosowaniu error_reporting(0);

Może źle coś robie?

Ten post edytował predator 16.04.2008, 16:55:47
Go to the top of the page
+Quote Post
erix
post 16.04.2008, 17:05:29
Post #6





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




Cytat
Nie mam takiego katalogu . Jak inaczej zabezpieczyć?

Jeśli masz dostęp do .htaccess, to za pomocą tego pliku możesz zabezpieczyć.

Cytat
Ale po zabezpieczeniu formularza (tak że po wprowadzeniu czego innego niż litery i cyfry zamiast przystępować do logowania pokazuje sie informacja) nie da sie chyba zastosowac SQL Injection.

Ach, faktycznie, moje niedopatrzenie. Ale strzeżonego Pan Bóg strzeże... Poza tym, nie masz możliwości wprowadzania innych znaków niż podstawowe ASCII (i to mniej). Więc np. polskie krzaczki odpadają chyba, że to celowe.

Cytat
Parse error: syntax error, unexpected '}'

Hmm, szczerze mówiąc, nie mam pomysłu, dlaczego tak się dzieje pomimo, że jest ustawione na zero... A innego rodzaju błędy są wypisywane? (np. notice, warning, itp)


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

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
predator
post 19.04.2008, 19:09:17
Post #7





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


Cytat
A innego rodzaju błędy są wypisywane? (np. notice, warning, itp)

Nie wiem jak takie błędy wywołać ale skoro tamten błąd sie pojawił to inne też zapewne sie pojawią.

Tak sie zastanawiam i przecież te polecenia z formularza są najpierw wysyłane do serwera i on je analizuje. Więc w bazie danych nic nikt nie namiesza ale na serwerze chyba może. Trzeba by było po stronie użytkownika sprawdzić najpierw chyba np poprzez java script dry.gif

Cytat
Jeśli masz dostęp do .htaccess, to za pomocą tego pliku możesz zabezpieczyć.

nie mam :/

Ale pliku php nie można podejrzeć podobno, tylko jakimiś zapytaniami lub jakoś inaczej. Są też programy do ściągania stron ale one tylko w html'u ściągają? albo sie myle?

Jakich błędów sie wystrzegać by nikt np w swoim skrypcie includując mój index.php nie podejrzał zakładając ze w tym index.php jest hasło?

P.S.
Zastosowałem mysql_escape_string razem z htmlspecialchars. Czy może to tak być?
  1. <?php
  2. if(mysql_num_rows(mysql_query("select * from users where user_login = '".mysql_escape_string(htmlspecialchars($login))."' AND user_haslo = '".mysql_escape_string(htmlspecialchars(md5($haslo)))."'"))){
  3. echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
  4. $_SESSION["zalogowany"]=1;
  5. $_SESSION['nick'] = mysql_escape_string(htmlspecialchars($login));
  6. }
  7. ?>


ma ktoś jakiś pomysł?

Ten post edytował predator 16.04.2008, 18:30:51
Go to the top of the page
+Quote Post
erix
post 20.04.2008, 20:03:59
Post #8





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




Cytat
Nie wiem jak takie błędy wywołać ale skoro tamten błąd sie pojawił to inne też zapewne sie pojawią.

Błąd składni uniemożliwia działanie skryptu.

Reszta (notice, warning) nie.

Cytat
Ale pliku php nie można podejrzeć podobno, tylko jakimiś zapytaniami lub jakoś inaczej. Są też programy do ściągania stron ale one tylko w html'u ściągają? albo sie myle?

Cytat
Jakich błędów sie wystrzegać by nikt np w swoim skrypcie includując mój index.php nie podejrzał zakładając ze w tym index.php jest hasło?


No, w Twoim wypadku jest OK; IMHO najbezpieczniej trzymać dane autoryzacyjne właśnie w ten sposób - jako parametry funkcji, a nie jako zmienne w jakimś pliku konfiguracyjnym. Można również w taki sposób, ale dodawaj np. usuwanie danych ze zmiennej konfiguracyjnej zaraz po podłączeniu, wyłącz wyświetlanie błędów, a jeśli nie chcesz (czasem się przyda), to utwórz własnego handlera (patrz: set_error_handler" title="Zobacz w manualu PHP" target="_manual i np. loguj je do pliku.

Cytat
Zastosowałem mysql_escape_string razem z htmlspecialchars. Czy może to tak być?

Do md5" title="Zobacz w manualu PHP" target="_manual nie musisz żadnej funkcji zabezpieczającej stosować, bo ona Ci nie zwróci żadnych znaków, które mogłbyby "popsuć" zapytanie (pomijam przypadek, w którym funkcja byłaby uszkodzona, ale dużo bardziej jest prawdopodobne, że ktoś włamie się na serwer i podejrzy interesujące go pliki). Swoją drogą, nie rozumiem, po co dodatkowo dajesz htmlspecialchars" title="Zobacz w manualu PHP" target="_manual przy zapytaniu. Bardziej kłopotliwe, bo znaki specjalne zamieni na encje (więcej miejsca w bazie; nazbiera się więcej loginów i trochę miejsca zajmie. Fakt, wartości znikome, ale grosik do grosika...).

Ten post edytował erix 20.04.2008, 20:05:05


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

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
pyro
post 20.04.2008, 20:14:09
Post #9





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


jezeli serwer bedzie mial wylaczone magic_quotes to nie bedzie ten skrypt(y) zbyt bezpieczny, ja bym dal na poczatku kazdego z tych skrypotow taka linijke:

  1. <?php
  2. if(!get_magic_quotes_gpc){die("niech to szlag, wylaczone magic quotes ;/");}
  3. ?>


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
erix
post 20.04.2008, 20:31:36
Post #10





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




http://pl2.php.net/manual/en/function.mysq...tring.php#78753


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

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
Crozin
post 20.04.2008, 21:46:33
Post #11





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


index.php:
  1. <?
  2.  
  3. $login = $_POST["login"];
  4. $haslo = $_POST["haslo"];
  5.  
  6.  
  7. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  8.  
  9. mysql_connect("", "", "")or die("Nie można nawiązać połączenia z bazą");
  10. mysql_select_db("")or die("Wystąpił błąd podczas wybierania bazy danych");
  11.  
  12. function ShowLogin($komunikat=""){
  13. echo "$komunikat<br>";
  14. echo "<form action='index.php' method=post>";
  15. echo "Login: <input type=text name=login><br>";
  16. echo "Hasło: <input type=text name=haslo><br>";
  17. echo "<input type=submit value='Zaloguj!'>";
  18. echo "</form>";
  19. echo "Jeśli nie jesteś zarejestrowany, <a href='rejestruj.php'>tu znajdziesz formularz</a>";
  20. }
  21.  
  22. ?>
  23. <!DOCTYPE html 
  24. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
  25.  <html>
  26. <head>
  27. <title>logowanie</title>
  28. </head>
  29. <body>
  30. <?php
  31. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany";}
  32. if($_SESSION["zalogowany"]!=1){
  33. if(!empty($login) && !empty($haslo)){
  34.  if(preg_match('#^[A-Za-z0-9_-]+$#', $login)){
  35. if(mysql_num_rows(mysql_query("select * from users where user_login = '".mysql_real_escape_string($login)."' AND user_haslo = '".md5($haslo)."'"))){
  36. echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
  37. $_SESSION["zalogowany"]=1;
  38. $_SESSION['nick'] = $login;
  39. }else 
  40. echo ShowLogin("zle haslo!!!");  
  41.  }else 
  42.  echo ShowLogin("nie dozwolone znaki");
  43. }echo 
  44. ShowLogin("wprowadz login i haslo");
  45. }else{
  46. ?>
  47. Zalogowałeś się pomyślnie!
  48. <br><a href='index.php?wyloguj=tak'>wyloguj się</a>
  49. <?php
  50. }
  51. ?>
  52.  
  53. </body>
  54.  </html>
rejestracja.php:
  1. <?php
  2. mysql_connect("", "", "")or die("Nie można nawiązać połączenia z bazą"); //połączenie z bazą danych
  3. mysql_select_db("")or die("Wystąpił błąd podczas wybierania bazy danych");
  4.  
  5. $login = $_POST["login"];
  6. $haslo = $_POST["haslo"];
  7.  
  8. function ShowForm($komunikat=""){ //funkcja wyświetlająca formularz rejestracyjny
  9. echo "$komunikat<br>";
  10. echo "<form action='rejestruj.php' method=post>";
  11. echo "Login: <input type=text name=login><br>";
  12. echo "Hasło: <input type=text name=haslo><br>";
  13. echo "<input type=hidden value='1' name=send>";
  14. echo "<input type=submit value='Zarejestruj'>";
  15. echo "</form>";
  16. }
  17. ?>
  18. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
  19.  <html>
  20. <head>
  21. <title>Formularz rejestracyjny</title>
  22. </head>
  23. <body>
  24. <?php
  25. if($_POST["send"]==1){ //sprawdzanie czy formularz został wysłany
  26. if(!empty($login) && !empty($haslo)){ //oraz czy uzupełniono wszystkie dane
  27. if(preg_match('#^[A-Za-z0-9_-]+$#', $login)){ //sprawdzenie poprawnosci znaków
  28. if(mysql_num_rows(mysql_query("select * from users where user_login='".mysql_real_escape_string($login)."'")))
  29. ShowForm("Użytkownik o podanym loginie już istnieje!!!");// sprawdzanie czy użytkownik o podanej nazwie już istnieje
  30. else{
  31. mysql_query("insert into users values(NULL, '".mysql_real_escape_string($login)."', '".md5($haslo)."')"); // zapisywanie rekordu do bazy
  32. echo "Rejestracja przebiegła pomyślnie. Możesz teraz przejść do <a href='index.php'>strony głównej</a> i się zalogować.";
  33. }
  34. }else 
  35. ShowForm("nie dozwolone znaki");
  36. }else 
  37. ShowForm("Nie uzupełniono wszystkich pól!!!");
  38. }else 
  39. ShowForm();
  40.  
  41. ?>
  42. </body>
  43. </html>
A za każdym razem, gdy wyświetlasz login (czy jakieś dane od użytownika) już na stronie - wtedy potraktuje te dane htmlspecialchars" title="Zobacz w manualu PHP" target="_manual()
Go to the top of the page
+Quote Post
predator
post 21.04.2008, 09:08:52
Post #12





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


Cytat
Tak sie zastanawiam i przecież te polecenia z formularza są najpierw wysyłane do serwera i on je analizuje. Więc w bazie danych nic nikt nie namiesza ale na serwerze chyba może.

czy dobrze mówie?
----
właśnie do pliku błędy chciałbym by zapisywało ale co mam wpisać? (nie uczyłem sie w szkole angielskiego i z tej strony nie bardzo rozumiem tych wyjaśnień :/)
Cytat
Swoją drogą, nie rozumiem, po co dodatkowo dajesz htmlspecialchars przy zapytaniu.

Cytat
A za każdym razem, gdy wyświetlasz login (czy jakieś dane od użytownika) już na stronie - wtedy potraktuje te dane htmlspecialchars()

te pola (obydwa pętlami zabezpieczyłem) mimo że zabezpieczone to gdyby komuś jakimś cudem udało sie wprowadzić inne znaki niż te dozwolone to wtedy htmlspecialchars zabezpieczy.
Cytat
jezeli serwer bedzie mial wylaczone magic_quotes to nie bedzie ten skrypt(y) zbyt bezpieczny

a co ktoś może zrobić?

--EDIT--
Kod
'".md5($haslo)."'
nawet gdyby ktoś wpisał coś nie dobrego to md5 itak to zakoduje więc chyba jednak nie potrzebne dodatkowo htmlspecialchars.

Jeśli wpisze w polu input cyfrę: 0 to informuje mnie ze nie wypelnłem wszystkich pól. Jak zrobić by 0 było traktowane nie jako puste pole a znak? Bo zamiast "nie wypełniłeś wszystkich pól" chciałbym by informowało po wprowadzeniu cyfry 0 że nie poprawne dane

Cytat
}echo
ShowLogin("wprowadz login i haslo");

Crozin. Nie wiem dlaczego ale zamiast echo musze wpisać tu else. Gdy jest echo to jeśli wpisze błędne dane to pojawia sie "złe hasło" a pod formularzem pojawia sie następny formularz "wprowadz login i haslo". Jeśli wpisze inne niż dozwolone znaki to zamiast "nie dozwolone znaki" pojawia sie "wprowadz login i haslo", pod spodem nie pojawia sie następny formularz wtedy.

Przecież jesli sprawdza czy pola puste:
  1. <?php
  2. if(!empty($login) && !empty($haslo)){
  3. [...]
  4.  }else
  5. ShowLogin("wprowadz login i haslo");
  6. ?>

i warunek jest że gdy nie (else) są puste to wypisz "wprowadz login i haslo"

To dlaczego gdy są puste, wyświetla "wprowadz login i haslo"? Przecież powinno wyświetlać tak gdy nie są puste. Z else działa ale nie rozumiem dlaczego.

Ten post edytował predator 21.04.2008, 10:46:23
Go to the top of the page
+Quote Post
erix
post 21.04.2008, 13:35:47
Post #13





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




Cytat
te pola (obydwa pętlami zabezpieczyłem) mimo że zabezpieczone to gdyby komuś jakimś cudem udało sie wprowadzić inne znaki niż te dozwolone to wtedy htmlspecialchars zabezpieczy.

Jak zabezpieczysz przy rejestrowaniu usera (INSERT), to się tam nie dostaną więcej. ;]

No chyba, że w bazie albo w plikach ktoś namiesza.

Cytat
właśnie do pliku błędy chciałbym by zapisywało ale co mam wpisać? (nie uczyłem sie w szkole angielskiego i z tej strony nie bardzo rozumiem tych wyjaśnień :/)

http://www.google.com/search?client=opera&...-8&oe=utf-8

Cytat
Jeśli wpisze w polu input cyfrę: 0 to informuje mnie ze nie wypelnłem wszystkich pól. Jak zrobić by 0 było traktowane nie jako puste pole a znak? Bo zamiast "nie wypełniłeś wszystkich pól" chciałbym by informowało po wprowadzeniu cyfry 0 że nie poprawne dane


  1. <?php
  2. (string)$zmienna
  3. ?>


Cytat
i warunek jest że gdy nie (else) są puste to wypisz "wprowadz login i haslo"

A wpisywałeś 0 (zero), pusty ciąg, itp?


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

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
predator
post 21.04.2008, 15:22:15
Post #14





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


Kod
<?php
(string)$zmienna
?>


nie rozumiem, jak mam tego użyć?

Napisze co chce zrobić. Chciałbym by po wprowadzeniu liczby, skrypt sprawdzał czy jest poprawna, jeśli tak to mógł być wykonywany następny warunek.
Mam taki kod, ale chciałbym więcej liczb zdefiniować a nie tylko 2 i by na 0 reagowało jak na źle wprowadzony kod a nie puste pole (z tym zerem tak jak tu napisałem nie działa ale taki warunek bym chciał zrobić):
Kod
$asd = "0";


  1. <?php
  2. if($_POST["kod"]=="$asd"){ echo "wpisałeś tylko liczbę 0";}
  3. else { if($_POST["kod"]== "2"){ tu nastepne warunki }
  4. }
  5. ?>


Cytat
A wpisywałeś 0 (zero), pusty ciąg, itp?

nic nie wpisywałem i nie powinno sie wyświetlać nic nawet przy uruchomieniu skryptu odrazu też nie powinno jeśli dam else zamiast echo bo przecież nic nie zostało wprowadzone a warunek sprawdza czy pola są puste

Ten post edytował predator 21.04.2008, 15:24:24
Go to the top of the page
+Quote Post
erix
post 21.04.2008, 15:28:03
Post #15





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




Cytat
nie rozumiem, jak mam tego użyć?

Tak, jak pokazałem. empty" title="Zobacz w manualu PHP" target="_manual zwraca true, jeśli wartość jest 0 (zero/false), '' (pusty string), null.

Rzutowanie na stringa zwróci 0 jako ciąg znaków, a nie liczbę, na którą wskazuje false. A używa się tego np. tak:

  1. <?php
  2. empty((string)$zmienna);
  3. ?>


Cytat
Mam taki kod, ale chciałbym więcej liczb zdefiniować a nie tylko 2 i by na 0 reagowało

Wszystkie liczby? is_numeric" title="Zobacz w manualu PHP" target="_manual/is_int" title="Zobacz w manualu PHP" target="_manual

Cytat
To dlaczego gdy są puste, wyświetla "wprowadz login i haslo"? Przecież powinno wyświetlać tak gdy nie są puste. Z else działa ale nie rozumiem dlaczego.

Yyyy, ale po co pole login/hasło, gdy są one podane...?

Wywal wykrzykniki przed empty" title="Zobacz w manualu PHP" target="_manual, to będziesz miał, jak chcesz... Choć nie rozumiem trochę, po co...


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

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
predator
post 21.04.2008, 16:21:01
Post #16





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


Cytat
Choć nie rozumiem trochę, po co...
nie rozumiemy sie chyba dlatego podam linka,
http://www.3xori.yoyo.pl/index.php
wpisz w obydwu polach np. aaaaabbbbbbbbb, później w jednej lub obu wpisz np znaki ;;;;; i zobaczysz że jeśli nie poprawne hasło lub login to pojawia sie pod spodem następny formularz no i właśnie dlaczego on sie tam pojawia (gdy jest echo) nie wiem. Gdy jest else to jest ok ale nie logiczne to troche bo else z tego co wiem wykonuje coś jeśli warunek nie został spełniony czyli jeśli pola nie są puste.
Cytat
Jeśli wpisze inne niż dozwolone znaki to zamiast "nie dozwolone znaki" pojawia sie "wprowadz login i haslo", pod spodem nie pojawia sie następny formularz wtedy.

teraz jest ok ale tylko to że sie pojawia formularz następny mnie wkurza

Cytat
Wszystkie liczby?

o to mi chodziło że chciałbym tam kilka liczb np 122, 3, 34 zapisać tak jak hasła ale jeśli wpisze
Kod
if($_POST["kod"]== ("122" or "3" or "34"))

to wtedy cokolwiek nie wpisze to zawsze przechodzi do następnych warunków
--EDIT--
Cytat
o to mi chodziło że chciałbym tam kilka liczb np 122, 3, 34 zapisać tak jak hasła ale jeśli wpisze
Kod
if($_POST["kod"]== ("122" or "3" or "34"))

to wtedy cokolwiek nie wpisze to zawsze przechodzi do następnych warunków

z tym sobie poradziłem, zaćmienie jakieś miałem przedtem, wystarczyło napisać
Kod
if(($_POST["kod"]== "122") or ($_POST["kod"]== "3") or ($_POST["kod"]== "34") itd


Ten post edytował predator 21.04.2008, 16:53:19
Go to the top of the page
+Quote Post
erix
post 21.04.2008, 16:57:14
Post #17





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




Cytat
teraz jest ok ale tylko to że sie pojawia formularz następny mnie wkurza

Napisałem, wywal wykrzykniki przy empty" title="Zobacz w manualu PHP" target="_manual w tamtym warunku.

Cytat
o to mi chodziło że chciałbym tam kilka liczb np 122, 3, 34 zapisać tak jak hasła ale jeśli wpisze


  1. <?php
  2. if($_POST["kod"]=="$asd"){ echo "wpisałeś tylko liczbę 0";}
  3. else { if($_POST["kod"]== "2"){ tu nastepne warunki }
  4. }
  5. ?>

na:

  1. <?php
  2. switch($_POST['kod']){
  3. case 1:
  4.  //kod "1"
  5. break;
  6. case 200:
  7.  //kod "200"
  8. break;
  9. case 102:
  10.  //kod "102"
  11. break;
  12. default:
  13. //jakiś inny
  14. }
  15. ?>


O to chodzi?

Ten post edytował erix 21.04.2008, 17:00:23


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

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
predator
post 21.04.2008, 17:11:05
Post #18





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


nie, nie już poradziłem sobie z tamtym smile.gif

Cytat
Napisałem, wywal wykrzykniki przy empty w tamtym warunku.

Po wywaleniu wykrzykników odrazu przy uruchomieniu są 2 formularze sciana.gif
Go to the top of the page
+Quote Post
erix
post 21.04.2008, 17:20:46
Post #19





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




  1. <?php
  2. if($_POST["send"]==1){ //sprawdzanie czy formularz został wysłany
  3. if(!empty($login) && !empty($haslo)){ //oraz czy uzupełniono wszystkie dane
  4. if(preg_match('#^[A-Za-z0-9_-]+$#', $login)){ //sprawdzenie poprawnosci znaków
  5. if(mysql_num_rows(mysql_query("select * from users where user_login='".mysql_real_escape_string($login)."'")))
  6. ShowForm("Użytkownik o podanym loginie już istnieje!!!");// sprawdzanie czy użytkownik o podanej nazwie już istnieje
  7. else{
  8. mysql_query("insert into users values(NULL, '".mysql_real_escape_string($login)."', '".md5($haslo)."')"); // zapisywanie rekordu do bazy
  9. echo "Rejestracja przebiegła pomyślnie. Możesz teraz przejść do <a href='index.php'>strony głównej</a> i się zalogować.";
  10. }
  11. }else 
  12. ShowForm("nie dozwolone znaki");
  13. }else 
  14. ShowForm("Nie uzupełniono wszystkich pól!!!");
  15. }else 
  16. ShowForm();
  17. ?>


Zakładam, że masz PHP5:

  1. <?php
  2. try{
  3.  
  4.  if($_POST["send"]==1){ //sprawdzanie czy formularz został wysłany
  5. if(!empty($login) && !empty($haslo)){ //oraz czy uzupełniono wszystkie dane
  6. if(preg_match('#^[A-Za-z0-9_-]+$#', $login)){ //sprawdzenie poprawnosci znaków
  7. if(mysql_num_rows(mysql_query("select * from users where user_login='".mysql_real_escape_string($login)."'")))
  8. throw new Exception('Użytkownik o podanym loginie już istnieje!!!');
  9. else{
  10. mysql_query("insert into users values(NULL, '".mysql_real_escape_string($login)."', '".md5($haslo)."')"); // zapisywanie rekordu do bazy
  11. echo "Rejestracja przebiegła pomyślnie. Możesz teraz przejść do <a href='index.php'>strony głównej</a> i się zalogować.";
  12. }
  13. }else 
  14. throw new Exception("nie dozwolone znaki");
  15. }else 
  16. throw new Exception("Nie uzupełniono wszystkich pól!!!");
  17. }else 
  18. throw new Exception();
  19.  
  20. }catch(Exception $ex){
  21. ShowForm($ex->getMessage());
  22. }
  23. ?>


Ten post edytował erix 21.04.2008, 17:21:13


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

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
Mlodycompany
post 21.04.2008, 17:22:17
Post #20





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


i jeszcze jedna moja uwaga. Przy wylogowywaniu zamiast $_SESSION["zalogowany"] zmieniac na 0 to zrob session_destroy();
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: 8.07.2025 - 21:11