Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> [php/mysql] SQL injection
bastek8989
post
Post #1





Grupa: Zarejestrowani
Postów: 205
Pomógł: 1
Dołączył: 11.09.2006

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


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
Go to the top of the page
+Quote Post
Luciano
post
Post #2





Grupa: Zarejestrowani
Postów: 102
Pomógł: 1
Dołączył: 26.07.2006
Skąd: Londyn

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) poprostu wykonuje
zastrzyk z wlasnego kodu wprost w serce aplikacji (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ogolnie mowiac - nie wierzyc uzytkownikowi bo to najwieksze zlo i dno (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował Luciano 17.10.2006, 17:22:44
Go to the top of the page
+Quote Post
bastek8989
post
Post #3





Grupa: Zarejestrowani
Postów: 205
Pomógł: 1
Dołączył: 11.09.2006

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował bastek8989 17.10.2006, 17:29:24
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




http://forum.php.pl/index.php?showtopic=23258

(IMG:http://forum.php.pl/style_emoticons/default/mad.gif)

Jak wyzej - zamykam /~nospor/
Go to the top of the page
+Quote Post

Closed TopicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 04:18