Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP/MySQL] Slashes, quotes i baza MySQL
Crade
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.05.2007

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


Przede wszystkim, na wstępie: jako nowy użytkownik forum - witam wszystkich smile.gif.

Sporo się mówi ostatnio o atakach SQL Injection (choć nie tylko), ale i także prawidłowym zabezpieczaniem skryptów. Jako, że ja nie miałem do czynienia z wieloma różniącymi się serwerami, nie mogę też mieć pojęcia na temat funkcji dotyczących automatycznego dodawania slashy przed znakami takimi jak ' " `. Chciałbym zadać pytanie, jednocześnie przeprowadzając małą "ankietę" pytając was o to, czy w swoich bazach danych MySQL trzymacie tekst w czystej formie w stylu, czy może skonwertowany za pomocą funkcji addslashes:

Cytat("Czysta forma")
Jestem Ania i chodzę na zakupy do sklepu tzw. "Super'Samu"

Cytat("Skonwertowana przez użycie funkcji addslashes")
Jestem Ania i chodzę na zakupy do sklepu tzw. \"Super\'Samu\"


Którą wersję preferujecie bardziej? Która wersja trzymania tekstu w bazie danych wydaje się Wam bezpieczniejsza? Mimo przyklejonego tematu o SQL Injection itp. byłbym wdzięczny za udzielanie się w temacie i wypisywanie zalet oraz wad wybranych przez Was sposobów.

Ten post edytował Crade 1.05.2007, 22:31:33
Go to the top of the page
+Quote Post
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


W bazie danych dane trzyma się w "czystej formie", co nie znaczy, że nie używa się funkcji zabezpieczających przed atakami SQL Injection (addslashes, mysql_escape_string, mysql_real_escape_string, itp.)


Prosty test: odpal sobie phpMyAdmina i spróbuj wykonać takie zapytanie:
  1. INSERT INTO tabela (pole_tekstowe) VALUES ('Jestem Ania i chodzę na zakupy do sklepu tzw. "Super'Samu"');
Wyrzuci błąd.

Następnie spróbuj wykonać takie zapytanie:
  1. INSERT INTO tabela (pole_tekstowe) VALUES ('Jestem Ania i chodzę na zakupy do sklepu tzw. \"Super'Samu\"');
i sprawdź jaki tekst znalazł się w bazie danych. Szczególną uwagę zwróć na to, czy zawiera ukośniki.


Ukośnik informuje tylko bazę danych, że następny po nim znak (apostrof, cudzysłów, itp.) ma być traktowany jako zwykły tekst, sam natomiast do bazy danych zapisywany nie jest.


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
Crade
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.05.2007

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


A tu przysłowiowa (_._), gdyż dane z formularza wprowadzone do skryptu w takiej formie:

  1. $zmienna = addslashes($_POST['zmienna']);
  2. myslq_query(" INSERT INTO tabela SET `jakiespole` = '$zmienna' ");


... w bazie danych występują razem ze slashami.

Czy przyczyną tego jest używanie SET zamiast VALUES? Hmm... nie mam pomysłów sad.gif.

Ten post edytował Crade 2.05.2007, 15:17:28
Go to the top of the page
+Quote Post
Kicok
post
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


  1. <?php
  2. echo($_POST['zmienna']);
  3. // Wyświetliły się slashe pomimo tego, że funkcję addslashes() użyjesz dopiero kilka linijek niżej? W takim razie poczytaj o magic_quotes:
  4. // <a href="http://pl.php.net/manual/pl/security.magicquotes.php" target="_blank">http://pl.php.net/manual/pl/security.magicquotes.php</a>
  5. // <a href="http://pl.php.net/manual/pl/function.get-magic-quotes-gpc.php" target="_blank">http://pl.php.net/manual/pl/function.get-m...-quotes-gpc.php</a>
  6.  
  7. echo('<br>');
  8.  
  9. $_POST['zmienna'] = addslashes($_POST['zmienna']);
  10. echo($_POST['zmienna']);
  11. // Teraz jest cała masa slashy. Te powstałe przez magic_quotes zostały dodatkowo p
    otraktowane funkcją addslashes()
  12.  
  13.  
  14. mysql_query("INSERT INTO tabela SET `jakiespole` = '{$_POST['zmienna']}'");
  15. // W bazie danych są teraz "pojedyncze" slashe, gdyż "połowa z nich" została potraktowana jako znaki ucieczki, a druga połowa jako zwykły tekst
  16. ?>


magic_quotes_qpc" title="Zobacz w manualu PHP" target="_manual - tą funkcją sprawdzasz, czy tablice $_POST, $_GET i $_COOKIE już na starcie zostały potraktowane funkcją addslashes(). Jeśli tak, to:
- jeśli używasz bazy danych MySQL, to dane wejściowe są już w pewnym stopniu zabezpieczone, jeśli używasz np. MSSQL to nie są zabezpieczone, bo MSSQL stosuje inny znak ucieczki.
- będziesz musiał pamiętać o użyciu funkcji stripslashes" title="Zobacz w manualu PHP" target="_manual przed wyświetleniem danych z wyżej wymienionych tablic superglobalnych. No chyba że nie razi cię to, że po wpisaniu w formularzu tekstu: Wydawnictwo O'Reilly na stronie wyświetli się: Wydawnictwo O\'Reilly


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
Crade
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.05.2007

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


Dzięki, Kicok, za pomoc i obszernego posta. Mimo to samemu udało mi się dojść (po dość długiej motaninie) do tego że magic_quotes_qpc jest włączone i znaki ucieczki dodają się same.

Początkowo zmieszałem się dlatego, że niektóre dane do zapytania pochodziły z formularza, a niektóre były zwykłymi zmiennymi. Te pierwsze były potraktowane slashami automatycznie, drugie zaś - nie. To mnie też właśniei zgubiło smile.gif.

Mimo tego dziękuję bardzo za okazaną pomoc - oby więcej takich ludzi biggrin.gif.
Go to the top of the page
+Quote Post

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 Aktualny czas: 20.08.2025 - 12:08