Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]sens stosowania stripslashes
Forum PHP.pl > Forum > Przedszkole
schwarzenegger
Funkcje magic_quotes_gpc, mysql_escape_string i addslashes dzialaja. Polaczenie z baza nie wykrzacza sie jak w zmiennej jest np apostrof '. W bazie nie zapisuja sie znaki ucieczki tzn \. Sprawdzilem przy wlaczonej funkcji magic_quotes_gpc i przy wylaczonej a za to z mysql_escape_string i addslashes. W zadnym z tych wypadkow w bazie nie pokazuja sie dodatkowe znaki. Zastanawiam sie czy jest sens stosowania funkcji stripslashes przy wyciaganiu danych z bazy skoro nie ma w niej zadnych dodatkowych znakow \ ?
Fifi209
A wiesz przynajmniej co jest traktowane przez magic quotes?
schwarzenegger
No dziala np na cudzyslow " czy na apostrof ' i jak pisalem te funkcje dzialaja bo inaczej bez nich wykrzacza sie zapytanie do bazy. Chodzi mi o to ze przy wlaczonych tych funkcjach (oczywiscie nie wszystkich naraz tylko kazda z osobna) nie pojawiaja mi sie dodatkowe backslashe \ w bazie i moge wyciagac dane z bazy bez fukncji stripslashes.
Fifi209
Na zmienne globalne m.in. $_GET, $_POST
schwarzenegger
To jest prosty formularz testowy:

Zmienna ktora wpisywalem w formularzu to:
a'a"a/a

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  4. <title>Untitled</title>
  5. </head>
  6.  
  7. <form action="test.php" method="get">
  8. <tr><td><input type="text" name="zmienna"><input type="submit" value="wyslij"></td></tr>
  9. </form>
  10. </body>
  11. </html>


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  3. <head>
  4.      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5.      <title>Untitled</title>
  6. </head>
  7.  
  8. <body>
  9.  
  10. <?php
  11.  
  12. $test = $_GET['zmienna'];
  13.  
  14. $db = new mysqli('localhost', 'uzytkownik', 'haslo', 'baza');
  15. $db->query ('SET character_set_connection=utf8');
  16. $db->query ('SET character_set_client=utf8');
  17. $db->query ('SET character_set_results=utf8');
  18.  
  19. $zapytanie = "insert into test2 values ('".null."', '".$test."')";
  20. $wynik = $db->query($zapytanie);
  21. if ($wynik)
  22. {
  23.  echo "ok";
  24. }
  25. else
  26. {
  27.  echo "blad";
  28.  }
  29. ?>
  30.  
  31. </body>
  32. </html>


To jest zmienna globalna:
  1. <?php
  2. $test = $_GET['zmienna'];
  3. ?>


Zostala ona zapisana do bazy przy wlaczonej funkji magic_quotes_gpc.

Potem wylaczylem magic_quotes i zapisalem do bazy zmienna:

  1. <?php
  2. $test = mysql_escape_string($_GET['zmienna']);
  3. ?>


Potem zapisalem do bazy zmienna:

  1. <?php
  2. $test = addslashes($_GET['zmienna']);
  3. ?>


Wynik w bazie jest nastepujacy:



Funkcje magic_quotes_gpc, mysql_escape_string i addslashes dzialaja bo inaczej jest blad przy zapisie do bazy.
Jednak nie zapisuja mi sie zadne backslashe w bazie i zastanawiam sie o co chodzi i jaki sens jest stosowania stripslashes?
viking
Poczytaj co się stanie z magic_quotes_gpc w przyszłych wersjach PHP. addslashes z tego co pamiętam (dawno nie używałem) nie były binarnie bezpieczne dlatego należy używać escapeowania dostępnego dla danego sterownika.
Generalnie jak chcesz mieć problemy to używaj w takiej formie jak podałeś winksmiley.jpg
dr_bonzo
Magic quotes to samo zlo. Zostalo wymyslone dla mega poczatkujacych programistow aby zapobiec SQL injection, ale juz tych troche zaawansowanych to wnerwia.

Wiec najlepiej: wylaczyc magic quotes - wszelakie, nie uzywac addslashes, tylko mysql'owego eskejpowania (real escape...) do wstawiania danych do bazy. Przy wyciaganiu danych nie usuwasz wtedy slashy.

No a jak nie mozesz magic quotes wylaczyc to najlepiej jak najwczesniej jej usunac ze zmiennych $_GET i $_POST - tu wlasnie stripslashesami.
No i (nie pamietam bo nie uzywam) ale przy ktorychs z magic_quotes, dane pobrane z bazy tez beda mialy slashe dodane, i trzeba je znow usuwac (stripslashes).
schwarzenegger
Ja uzywam wersji: mysql_escape_string.
Mam tez wlaczone na serwerze magic_quotes_gpc.
Dane zapisywane do bazy sa bezpieczne.
Moje pytanie dotyczylo wyciagania danych z bazy i funkcji stripslashes.
Czyli jak uzywam mysql_escape_string to nie musze uzywac stripslashes i o to mi chodzilo bo wolalem sie upewnic.
dr_bonzo
A co z
Cytat
magic_quotes_runtime If enabled, most functions that return data from an external source, including databases and text files, will have quotes escaped with a backslash. Can be set at runtime, and defaults to off in PHP. See also set_magic_quotes_runtime() and get_magic_quotes_runtime().
? BO wtedy musisz usunac slashe (teoretycznie sprzed quote'ow tylko)


No i artykul czemu warto je wylaczyc: http://en.wikipedia.org/wiki/Magic_quotes
viking
Zajrzyj do dokumentacji mysql_escape_string i zobacz co tam jest napisane o deprecated. Jeśli nie musisz korzystać ze specyficznych f-kcji mysqli używaj PDO i problem z głowy. Jęśli wkładasz dobrze escapowane to nie musisz się martwić przy wyciąganiu.
schwarzenegger
magic_quotes_runtime mam wylaczone wiec nie ma z tym problemu.
Poczytalem o mysql_escape_string i przerzucam sie na mysql_real_escape_string.
PDO zajme sie pozniej.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.