Sigurnost pri MySQL-u, provjeri ulaznih podataka...

  • 16 odgovora
  • 7.361 pregleda
Sigurnost pri MySQL-u, provjeri ulaznih podataka... 15.08.2006. u 17:10 · pre 245 meseci #1
Gledao sam po Netu i forumu ali nisam mogao da nadjem cjelinu. Da li bi neko mogao objasniti i napisati codove koji su potrebni za zastitu i sigurnost kod osnovnih php radnji? Npr. sta se sve treba filtrirati, pregledati, zastiti npr. kod konakcije i koristenja MySQL? Pa onda npr. koje sve korake treba preduzeti kod provjere ulaznih podataka koji se kasnije koriste u PHP-u... Jer nigdje nema to objedinjeno na jednom mjestu sve te zastite, provjere i sl. Meni je to sada potrebno a mislim da ce i drugima trebati.
Evo ja dajem neke od provjera koje ja znam:

Code:

/* Provjera 1: za prazno polje */
if ($text=="")
    {
    include "greska1.php";
    die;
    }
       else 
       {
       ....

/* Provjera 2: za duzinu */
    if (strlen($text) > $neka_vrijednost)
     {    
    include "greska1.php";
    die;
    }
    else
    {        
    .....
/* Provjera 3: za specijalne znakove */
    $spec_chars = "\s\-\;\:\*\+\.\(\)\[\]\{\}\?\,\"\'\#"; 
        if (preg_match("#[".$spec_chars."]#i", $text))
        {
        include "greska1.php";
        die;
        }    
        else
        {
                 .....

/* Provjera 4: za integer (ako je potrebno)*/
        function myIsInt ($x) 
            {
               return (is_numeric($x) ? intval($x) == $x : false);
            }
            function Test($x) 
            {
                   if (myIsInt($x) == false)
                {
                include "greska1.php";
                die;
                   }
               }


Ja znam da ovoga ima jos tonu narocito za MySQL i neke osjetljive stvari. Meni licno treba za MySQL i ako je potrebno jos neke provjere kod ulaznih podataka?
Ili bolje receno, sta je sve potrebno za "maksimalnu sigurnost" u PHP skriptama?
Potpis
AleXandar
Re: Sigurnost pri MySQL-u, provjeri ulaznih podataka... 16.08.2006. u 01:06 · pre 245 meseci #3
dovoljan to je addslashes

1. ako neko proba sql injection - ne uspeva
2. ako numericki argument nije u opsegu baza vraca 0 redova
3. ako neko da pogresan argument pa se napravi upit sa pogrsnim tipom podatka, baza vraca gresku

To sto ti radis je nepotrebno komplikovanje, tj. tupljenje:
Re: Sigurnost pri MySQL-u, provjeri ulaznih podataka... 16.08.2006. u 01:24 · pre 245 meseci #4
TOPLO PREPORUCUJEM knjigu:
php|architect's Guide to PHP Security
Ilia Alshanetsky

Pokriva ovu temu, a i jos gomilu! VRLO KORISNO SHTIVO! ;-)
Potpis
ZelenaLutrija.com - Saznajte sve o lutriji za zelenu kartu (doživotni boravak u Sjedinjenim Američkim Državama)
Re: Sigurnost pri MySQL-u, provjeri ulaznih podataka... 16.08.2006. u 09:09 · pre 245 meseci #5
Citat:
bojan_bozovic: dovoljan to je addslashes

1. ako neko proba sql injection - ne uspeva
2. ako numericki argument nije u opsegu baza vraca 0 redova
3. ako neko da pogresan argument pa se napravi upit sa pogrsnim tipom podatka, baza vraca gresku

To sto ti radis je nepotrebno komplikovanje, tj. tupljenje:


1. Ovo nije tacno, najbolje je koristiti mysql_real_escape_string() jer u nekim slucajevima (nekim character setovima)
je moguce preskociti addslashes.

3. Ovde opet treba da se vodi racuna o nacinu prikazivanje greske zbog XSS napada i zbog otkrivanja podataka o bazi.
Uglavnom, zbog sigurnosti, je potrebno hendlovati errorima i prikazivati neku svoju error stranicu.
Potpis
“If you think you are too small to make a difference, try sleeping with a mosquito.” - Dalai Lama
XIV
Re: Sigurnost pri MySQL-u, provjeri ulaznih podataka... 16.08.2006. u 10:01 · pre 245 meseci #7
Citat:
bojan_bozovic: XSS injection je drugo, kada korisnik moze da ubaci u html svoje, npr. postuje link ka svome sajtu, ali XSS nema veze sa bazom ima li?


Mislis na XSS Cross Site Scripting LOL

http://212.200.81.65/testMysql.php

Klikni na Lista korisnika...

Znaci u bazu podataka je ubacen
Code:

<script>alert(document.cookie)</script>




Ali to je sve greska zato sto ne filtrira i proverava sta je korisnik uneo..



Inace sto se tice SQL inekcija najvaznije da da koristis:
Code:

mysql_real_escape_string()



Poz
sale
Potpis
Sto mozes danas ne ostavljaj za sutra!
Re: Sigurnost pri MySQL-u, provjeri ulaznih podataka... 16.08.2006. u 10:09 · pre 245 meseci #8
Citat:
bojan_bozovic: XSS injection je drugo, kada korisnik moze da ubaci u html svoje, npr. postuje link ka svome sajtu, ali XSS nema veze sa bazom ima li?


Da XSS je kad se ubaci svoj script kod tamo gde ne bi trebalo. Ja sam hteo da kazem da u slucaju kada se pojavi greska u bazi i ako se onda ista stampa (html) korisniku i to sa npr prosledjenim parametrima u koje smo pre toga stavili neki svoj script kod moguce je izvrsiti XSS napad. I zbog toga je potrebno pravilno hendlovati greskama.

Citat:
sale83: 
...
Ali to je sve greska zato sto ne filtrira i proverava sta je korisnik uneo..
...


Ili zato sto se pravilno ne eskejpuje kada se vraca korisniku ili kada se upisuje u bazu ...

Citat:
sale83: 
Inace sto se tice SQL inekcija najvaznije da da koristis:
Code:

mysql_real_escape_string()

...


Ovo sam vec rekao ... a i evo jedan link: http://shiflett.org/archive/184
Potpis
“If you think you are too small to make a difference, try sleeping with a mosquito.” - Dalai Lama
XIV
Re: Sigurnost pri MySQL-u, provjeri ulaznih podataka... 16.08.2006. u 10:19 · pre 245 meseci #9
Ivan.Markovic

PS- Obezbedi svoj sajt od SQL inekcija!!!!!!

Mozda gresim a ako vec se bavis sigurnoscu onda nebi trebao da radis onako kao sto si uradio
na sajtu sto ti je u podpisu...

Prikazivanje strukture SQL query-ja nikako nebi trebalo da se prikazuje na onaj nacin sto ti radis..


Poz
sale
Potpis
Sto mozes danas ne ostavljaj za sutra!
Re: Sigurnost pri MySQL-u, provjeri ulaznih podataka... 16.08.2006. u 10:27 · pre 245 meseci #10
Evo sad sam zvanicno utvrdio da ti sajt ima sledece propuste:

Code:

1) SQL inekcije
2) XSS 

Dalje necu da gledam...


Kad se vec bavis sa sigurnoscu prvo obezbedi svoj sajt..


Poz
sale
Potpis
Sto mozes danas ne ostavljaj za sutra!
Re: Sigurnost pri MySQL-u, provjeri ulaznih podataka... 16.08.2006. u 11:23 · pre 245 meseci #11
Code:
O RLY?


Probaj XSS. Nema.

Editovano da m Google ne crawluje error strane.

[Ovu poruku je menjao bojan_bozovic dana 16.08.2006. u 12:58 GMT+1]

Sale83 ima linka u tvom postu :(

[Ovu poruku je menjao bojan_bozovic dana 16.08.2006. u 12:58 GMT+1]
Re: Sigurnost pri MySQL-u, provjeri ulaznih podataka... 16.08.2006. u 11:40 · pre 245 meseci #13
Postojao je jedan XSS exploit na mome sajtu, vezan za postovanje web sajta mojih korisnika, ispravno escapeovano omogucavalo je da se ubaci javaskript u HTML. Ali to bese sa prvom verzijom sajta. Ako mislis da si u pravu, daj mi URL i navedi koja forma ima problem. Moji korisnici ne mogu ubaciti XSS kao svoj tekst, npr ovako http://maestitia.net/index.php?u=134 ali su mogli prteko linka.
Sto se tice login forme, dozvoljeno je A-Z a-z i 0-9 i - i _ i razmak, pa tu ne moze biti problema.
Re: Sigurnost pri MySQL-u, provjeri ulaznih podataka... 16.08.2006. u 11:40 · pre 245 meseci #14
@sale83

Lol, poslao si mi pp a nisam gledao da si poceo da se razbacujes ovde ...
Ok odgovorio sam ti tamo zbog cega je tako ono sto si nasao a i da je ne moguce na bilo
koji nacin iskoristiti to.

Mislim da smo krenuli o offtopic tako da je bolje da se povucem ... :)
Potpis
“If you think you are too small to make a difference, try sleeping with a mosquito.” - Dalai Lama
XIV
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme