Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] - logowanie i mysql_real_escape_string, W jaki sposób będzie poprawnie
Mega_88
post
Post #1





Grupa: Zarejestrowani
Postów: 360
Pomógł: 34
Dołączył: 20.08.2011

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


Witam, może mi ktoś pomóc i powiedzieć, która wersja jest poprawna lub, której lepiej użyć żeby zapewnić sobie minimum bezpieczeństwa przy logowaniu ? Zrobiłem dwie wersje, ale jakoś bardziej poprawnie wygląda mi druga wersja. Mogę prosić o jakieś podpowiedzi, sugestie odnośnie kodu ?

  1. if(isset ($_POST["wyslij"])){
  2. $user = $_POST['user'];
  3. $password = $_POST['password'];
  4. $logowanie = mysql_query ("select login,haslo from user_cms where login='" . mysql_real_escape_string($user)."' and haslo='" . mysql_real_escape_string($password)."' and status=1");
  5. if(mysql_num_rows($logowanie)==1) {
  6. $_SESSION["isLoggedIn"]=1;
  7. $_SESSION["login"]=$user;
  8. }
  9. }



  1. if(isset ($_POST["wyslij"])){
  2. $user = mysql_real_escape_string($_POST['user']);
  3. $password = mysql_real_escape_string($_POST['password']);
  4. $logowanie = mysql_query ("select login,haslo from user_cms where login='$user' and haslo='$password' and status=1");
  5. if(mysql_num_rows($logowanie)==1) {
  6. $_SESSION["isLoggedIn"]=1;
  7. $_SESSION["login"]=$user;
  8. }
  9. }
  10.  
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Bateria
post
Post #2





Grupa: Zarejestrowani
Postów: 129
Pomógł: 13
Dołączył: 23.11.2011

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


Wychodzi na to samo.
Ewentualnie do $_POST addslashes, chociaż i tak jest to już zbędne.
  1. if(isset ($_POST["wyslij"])){
  2. $user = addslashes($_POST['user']);
  3. $password = addslashes($_POST['password']);
  4. $logowanie = mysql_query ("select login,haslo from user_cms where login='" . mysql_real_escape_string($user)."' and haslo='" . mysql_real_escape_string($password)."' and status=1");
  5. if(mysql_num_rows($logowanie)==1) {
  6. $_SESSION["isLoggedIn"]=1;
  7. $_SESSION["login"]=$user;
  8. }
  9. }

Największe bezpieczeństwo gwarantuje Ci jednak użycie biblioteki PDO.

Ten post edytował Bateria 23.03.2013, 21:31:39
Go to the top of the page
+Quote Post
Wazniak96
post
Post #3





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


Według mnie nie ma różnicy, oprócz tego, że w drugim kodzie dodatkowo marnujesz czas i ram na przypisywanie danych do zmiennych. To tak jakbyś spytał jaka jest różnica między
  1. <?php
  2. $txt = 'Hello World!';
  3. echo $txt;
  4. ?>

a
  1. <?php
  2. echo 'Hello World!';
  3. ?>
Go to the top of the page
+Quote Post
Mega_88
post
Post #4





Grupa: Zarejestrowani
Postów: 360
Pomógł: 34
Dołączył: 20.08.2011

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


Cytat(Bateria @ 23.03.2013, 21:28:05 ) *
Wychodzi na to samo.
Ewentualnie do $_POST addslashes
  1. if(isset ($_POST["wyslij"])){
  2. $user = addslashes($_POST['user']);
  3. $password = addslashes($_POST['password']);
  4. $logowanie = mysql_query ("select login,haslo from user_cms where login='" . mysql_real_escape_string($user)."' and haslo='" . mysql_real_escape_string($password)."' and status=1");
  5. if(mysql_num_rows($logowanie)==1) {
  6. $_SESSION["isLoggedIn"]=1;
  7. $_SESSION["login"]=$user;
  8. }
  9. }


Myślałem właśnie nad dodaniem jeszcze "addslashes", ale czy to nie jest już tak trochę nawyrost i nie wpłynie to bardziej na bezpieczeństwo ?


Wiem, że PDO byłoby lepsze, ale jednak chciałbym jeszcze przerobić ten temat.

Ten post edytował Mega_88 23.03.2013, 21:35:53
Go to the top of the page
+Quote Post
Bateria
post
Post #5





Grupa: Zarejestrowani
Postów: 129
Pomógł: 13
Dołączył: 23.11.2011

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


Nie ma co mieszać funkcji PHP w zapytaniach MySQL, przypisanie ich do zmiennych znacznie zwiększy czytelność kodu.
  1. if(isset ($_POST["wyslij"])){
  2. $user = mysql_real_escape_string($_POST['user']);
  3. $password = mysql_real_escape_string($_POST['password']);
  4. $logowanie = mysql_query ("select login,haslo from user_cms where login='$user' and haslo='$password' and status=1");
  5. if(mysql_num_rows($logowanie)==1) {
  6. $_SESSION["isLoggedIn"]=1;
  7. $_SESSION["login"]=$user;
  8. }
  9. }

or
  1. if(isset ($_POST["wyslij"])){
  2. $user = addslashes($_POST['user']);
  3. $password = addslashes($_POST['password']);
  4. $logowanie = mysql_query ("select login,haslo from user_cms where login='$user' and haslo='$password' and status=1");
  5. if(mysql_num_rows($logowanie)==1) {
  6. $_SESSION["isLoggedIn"]=1;
  7. $_SESSION["login"]=$user;
  8. }
  9. }


Ten post edytował Bateria 23.03.2013, 21:39:50
Go to the top of the page
+Quote Post
Michael2318
post
Post #6





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Kompletny bezsens, przecież to nie ma w ogóle żadnego znaczenia, której metody użyjesz bo obie niczym się nie różnią (z punktu widzenia praktycznego).
Go to the top of the page
+Quote Post
Wazniak96
post
Post #7





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


Po co addslashes skoro używamy już mysql_real_escape_string ?
Polecam do przeczytania: mysql_real_escape_string vs. addslashes

PDO jest najlepszym rozwiązaniem. Po co tworzyć skrypt na module mysql_* skoro można od razu użyć PDO, przy okazji zaznajomić się z jego użyciem i nie głowić się nad bezpieczeństwem?
Go to the top of the page
+Quote Post
Mega_88
post
Post #8





Grupa: Zarejestrowani
Postów: 360
Pomógł: 34
Dołączył: 20.08.2011

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


Cytat(Wazniak96 @ 23.03.2013, 21:42:42 ) *
Po co addslashes skoro używamy już mysql_real_escape_string ?
Polecam do przeczytania: mysql_real_escape_string vs. addslashes

PDO jest najlepszym rozwiązaniem. Po co tworzyć skrypt na module mysql_* skoro można od razu użyć PDO, przy okazji zaznajomić się z jego użyciem i nie głowić się nad bezpieczeństwem?


Też mi się tak wydawało, że dodanie addslashes do escape_string już nie jest potrzebne.

A natomiast jeżeli już użytkownik się zaloguje to przy wysyłaniu czegoś do bazy przez POST używać wtedy addslashes bez escape_string tak żeby można było w tekscie stosować " ' " dobrze myślę ?


Jak pisałem wcześniej zdaję sobie sprawę, że PDO będzie najlepszym wyjściem, ale niestety nie jest to pisanie skryptu od nowa tylko przerabianie, który był stworzony wcześniej, a obecnie nie mam tyle czasu, że przerobić wszystko na PDO.


Więc jak wywnioskowałem z Waszych odpowiedzi mam zostać przy tej wersji:

  1. if(isset ($_POST["wyslij"])){
  2.  
  3. $user = mysql_real_escape_string($_POST['user']);
  4.  
  5. $password = mysql_real_escape_string($_POST['password']);
  6.  
  7. $logowanie = mysql_query ("select login,haslo from user_cms where login='$user' and haslo='$password' and status=1");
  8.  
  9. if(mysql_num_rows($logowanie)==1) {
  10.  
  11. $_SESSION["isLoggedIn"]=1;
  12.  
  13. $_SESSION["login"]=$user;
  14.  
  15. }
  16.  
  17. }


Ten post edytował Mega_88 23.03.2013, 22:19:03
Go to the top of the page
+Quote Post
Bateria
post
Post #9





Grupa: Zarejestrowani
Postów: 129
Pomógł: 13
Dołączył: 23.11.2011

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


mysql_real_escape_string do operacjach na bazach danych, addslashes wszystkich innych na stringach.
Go to the top of the page
+Quote Post
Wazniak96
post
Post #10





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


Spokojnie. Wszystko jest odwracalne przez stripslashes (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

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: 24.12.2025 - 23:55