Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL]Jakie jest najlepsze zabezpieczenie przed SQL Injection?
Forum PHP.pl > Forum > Przedszkole
Gość
Czy mysql_real_escape_string() będzie wystarczającym zabezpieczeniem przed SQL Injection?
A jeżeli nie to dlaczego i czy też są jakieś inne lepsze sposoby?
Wazniak96
Wrstarczy. Innym sposobem jest funkcja addshlashes. Dodaja one przed cudzygłosami i apostrofami shlshe przez co Uniemozliwiają SQL Injecton. Dlaczego .? To pytanie zadaj sobie sam po przeczytaniu co to wgl jest i na czym polega ten atak wink.gif
Gość
Słyszałem też takie opinie, że od mysql_real_escape_string() lepsza będzie parametryzacja zapytań SQL. To by mogło znaczyć, że funkcja mysql_real_escape_string() w pełni nie zabezpiecza przed atakiem SQL Injection. Pytanie, dlaczego?
Wazniak96
Na stronki i serwisy jakie my tworzymy w zupelnosci westarczą takie zabezpieczenia jako, ze nie będą chyba na nią się włamywac hakerzy z anonymous. Bez przesady.
Mephistofeles
Nie. Używaj PDO kiedy tylko to możliwe, mysql_ to stary wynalazek.
Dlaczego mysql_real_escape_string() nie zabezpiecza w 100%? Bo może trafić się dziura w PHP, co kompletnie omijamy używając podpinania parametrów (baza wie, co jest zapytaniem, a co zmienną).
polkom21
Ja przeciw SQL Injection używam prostej funkcji
  1. function safe($msg) {
  2. $msg = str_replace("'", "'", $msg);
  3. $msg = str_replace("--", "--", $msg);
  4. return $msg;
  5. }

Czy to jest złe? tongue.gif
memory
Cytat(polkom21 @ 29.07.2012, 01:39:16 ) *
Ja przeciw SQL Injection używam prostej funkcji
  1. function safe($msg) {
  2. $msg = str_replace("'", "'", $msg);
  3. $msg = str_replace("--", "--", $msg);
  4. return $msg;
  5. }

Czy to jest złe? tongue.gif


A co to ma niby robić?
Gość
Cytat(Mephistofeles @ 28.07.2012, 23:02:38 ) *
Nie. Używaj PDO kiedy tylko to możliwe, mysql_ to stary wynalazek.
Dlaczego mysql_real_escape_string() nie zabezpiecza w 100%? Bo może trafić się dziura w PHP, co kompletnie omijamy używając podpinania parametrów (baza wie, co jest zapytaniem, a co zmienną).


Masz rację - w PDO byłoby najlepiej, tyle tylko, że ja do tej pory na swojej stronie pisałem wszystko w czystym MySQL i musiałbym wszystkie zapytania przerobić.

A może gdyby zastosować dwie funkcje:
  1. $zmienna = strtolower(mysql_real_escape_string($zmienna);
  2. $zmienna = ereg_replace("[^ 0-9a-zA-Z]", " ", $zmienna);


Wówczas funkcja ereg_replace() usunęłaby wszystkie niepożądane znaki i po sprawie. Czy też tylko tak mi się wydaje i takie rozwiązanie też nie gwarantuje pełnej ochrony przed SQL Injection?


tuptak6
Cytat
Wówczas funkcja ereg_replace() usunęłaby wszystkie niepożądane znaki i po sprawie. Czy też tylko tak mi się wydaje i takie rozwiązanie też nie gwarantuje pełnej ochrony przed SQL Injection?


Jak się nie myle to w PHP 5.3 już nawet nie ma ereg. smile.gif
webdice
Temat był już poruszany na forum wiele razy. Proszę poszukać. Zamykam.
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.