Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] SQL injection
Forum PHP.pl > Forum > Przedszkole
bastek8989
Witam

Mam pytanie do doswiadczonych programistow php, znacie jakies sprawdzone sposoby na uchronienie sie przed atakami sql injection? Jakie sa najczesciej popelniane bledy za ktore potem mozemy slono zaplacic i stracic swoje dane w bazie?

pozdrawiam
Luciano
Blad jest od zawsze ten sam i to bez wzgledu czy to php czy c czy inny jezyk.
Mianowicie najwieksze zlo pochodzi od uzytkownika tak wiec kazda wartosc
na ktora moze miec wplyw, czyli pochodzi od niego.. i nie mowie tu tylko o tak
oczywistych sprawach jak zmienne z GET, POST ale rowniez ciasteczek i wszystkiego
innego co przy odrobinie checi mozna ustawic samodzielnie MUSI BYC SPRAWDZONE.

Czy wartosc OCZEKIWANA jest wartoscia WPROWADZONA. Czy &id= strony to liczba
czy moze zapytanie SQLa, czy includowany plik z &file= to faktycznie plik znajdujacy sie
w okreslonym z gory katalogu, bez %00, http://, ../ i tego typu ciagow w nazwie.

Najlepiej ustalic jedno miejsce z ktorego bedziemy pobierac wszystko od uzytkownika.
Jakas warstwa posredniczaca - bardzo latwo napisac taka klase.
Z liczbami nie ma wiekszego klopotu, zzazwyczaj wystarczy rzutowanie $id = (int) $_GET['id'].
Warto sprawdzic jeszcze logike np. czy > 0 itd ale to juz takie grozne nie jest. W przypadku stringow
warto uzywac mysql_real_escape, testowac pod wzgledem niebezpiecznych sekwencji ktore mogly by
zaszkodzic z perspektywy skrypty.

ps. dobrym nawykiem IMHO w zapytaniach SQLa jest stosowanie " " do liczb. Czasem spotykam kod
gdzie programista wyszedl z zalozenia, ze skoro poruwnuje liczbe w zapytaniu np. SELECT * FROM tabela
WHERE id = $zmienna nie musi pisac WHERE id = "$zmienna". Jest to prawda, zapytanie bedzie dzialac ale
ryzyko jest takie, ze jesli nie sprawdza czy liczba faktycznie jest liczba pomimo zastepowania " na rzecz \"
wciaz jest narazony poniewaz hax04 nie musi uciekac z " " poniewaz ich tam wcale nie ma smile.gif poprostu wykonuje
zastrzyk z wlasnego kodu wprost w serce aplikacji biggrin.gif

Ogolnie mowiac - nie wierzyc uzytkownikowi bo to najwieksze zlo i dno biggrin.gif
bastek8989
podsumowywujac = nieuzywac where "$zmienna"

i najlepiej get i post poddac filtracji
oto moj skrypcik filtrujacy:
  1. <?php
  2. if (isset($_POST['addnazwa'])) {
  3.  $addnazwa = $_POST['addnazwa'];
  4.  $addnazwa = trim(strip_tags($addnazwa));
  5.  $addnazwa = mysql_escape_string($addnazwa);
  6.  if ($addnazwa == '') {
  7.  unset($addnazwa);
  8.  }
  9. }
  10. ?>


czy wystarczajaco zabezpiecza on wpisane przez suera dane? czy jeszcze oczyms zapomnailem smile.gif
erix
http://forum.php.pl/index.php?showtopic=23258

mad.gif

Jak wyzej - zamykam /~nospor/
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.