Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Bezpieczeństwo strony
Forum PHP.pl > Forum > Przedszkole
Asuri
Witam, jestem w trakcie tworzenia pierwszej strony która będzie odwiedzana przez większą ilość użytkowników. I tu się trochę obawiam o bezpieczeństwo dlatego wolę zapytać czy mój kod jest wystarczająco bezpieczny.

Na stronie będzie wiele formularzy. Każda zmienna z formularza jest filtrowana w ten sposób:
  1. <?php function clear($text) {
  2. $text = stripslashes($text);
  3. }
  4. return $text;
  5. } ?>

A do bazy danych dane przesyła się tak:
  1. $zap="INSERT INTO `chat` (`od`, `time`, `say`) VALUES
  2. ('$anon_nick', '$time', '$say')";
  3. mysql_query($zap) or die('Dodanie wpisu nie powiodło się.');

I tu pytanie czy to jest bezpieczny sposób? Myślałem jeszcze o zamienieniu znaku apostrof i cudzysłowia na encję by przy wyświetleniu zamieniało z powrotem na ten znak. W niektórych przypadkach nie mogę zabronić użytkownikom używania tych znaków ale wiem, że można ich użyć do ataku, więc czy zamiana ' i " na encję sprawi, że kod sql injection się nie wykona? Jeśli tak to: Zauważyłem, że funkcja htmlentities zamienia cudzysłów na encję (w bazie danych jest encja a w przeglądarce widać z powrotem cudzysłów) i to samo ze znakami >< jednak pozostał znak ' czyli apostrof i tu pytanie czy jest funkcja która zrobi to samo z tym znakiem czy muszę zamieniać znak na encję oraz przy wyjściu samodzielnie zamieniać encję na apostrof?
Crozin
Nie, Twój kod nie jest bezpieczny. Korzystasz z przestarzałych funkcji mysql_query i pokrewnych. Dodatkowo htmlspecialchars/htmlentities powinieneś używać przed wyświetleniem danych w dok. HTML, nie przy wrzucaniu danych do bazy.
nospor
Kod podanej przez Ciebie funkcji Clear() bardzo czesto sie przewija przez forum. Czy w necie jest jakis serwis: Kompedium błędnej wiedzy archaicznej , z ktorej to strony początkujacy ludzie czerpią wiedzę?

Cytat
Myślałem jeszcze o zamienieniu znaku apostrof i cudzysłowia na encję by przy wyświetleniu zamieniało z powrotem na ten znak
Poczytaj o atakach SQLInjection, jak się przed nimi bronic, to przestaniesz wypisywac takie dyrdymaly, jak zamiana apostrfow na encje.
Asuri
Cytat(Crozin @ 8.10.2014, 14:10:44 ) *
Korzystasz z przestarzałych funkcji mysql_query i pokrewnych.

Czyli powinienem przerzucić się na PDO?

Cytat(Crozin @ 8.10.2014, 14:10:44 ) *
powinieneś używać przed wyświetleniem danych w dok. HTML, nie przy wrzucaniu danych do bazy.

Dlaczego? Kilka razy w internecie widziałem tą uwagę ale nigdy żadnego wyjaśnienia, więc pytam bo chcę wiedzieć gdzie leży różnica.

"Czy w necie jest jakis serwis: Kompedium błędnej wiedzy archaicznej?"
Tak, jest. Masa darmowych poradników pisana prawdopodobnie przez innych początkujących a ci lepsi nie chcą dzielić się za darmo wiedzą. Napisaliście mi, że źle robię ale naprowadzić na dobrą drogę to nie bardzo. Jedyne co od was się dowiedziałem konkretnego to, że powinienem zamieniać na encję przy wyświetleniu ale dlaczego to już nie, więc de facto nic konkretnego się nie dowiedziłem. Dzięki.
nospor
A teraz czytamy ze zrozumieniem:
Cytat
Poczytaj o atakach SQLInjection, jak się przed nimi bronic, to przestaniesz wypisywac takie dyrdymaly, jak zamiana apostrfow na encje.

Wiem, ze to trudne, ale postaraj sie. Wyraz po wyrazie, potem sproboj z tego z klecic zdanie wink.gif

Zas co do zamieniania na encje przed wyswietlaniem, to poczytaj o atakach XSS - tam jest odpowiedź na to pytanie.
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.