Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Da li se sajt može provjerit na sigurnosne rupe(SQL injections...)

  • 9 odgovora
  • 4.439 pregleda

Najnovija ↓

Da li se sajt može provjerit na sigurnosne rupe(SQL injections...) 15.09.2006. u 02:15 · pre 245 meseci #1
Pozdrav svim PHP programerima.

Pošto imam nekoliko stranica koje sam radio u PHPu od kojih su dva portala sa relativno velikim brojem posjeta, želio bi samo da pitam ako ima ikakav način da provjerim da li je čitava stranica ranjiva na PHP injections ili druge oblike zlouporabe.

Pozz svima
Re: Da li se sajt može provjerit na sigurnosne rupe(SQL injections...) 15.09.2006. u 02:26 · pre 245 meseci #2
Postoji.

Neko treba da uradi jedan mali security audit od strane nekoga ko se bakce web sigurnoscu il probaj enki od automatizovanih alata kao sto su http://www.acunetix.com/vulnerability-scanner/




Jedino sto moras imati na umu je da ako se rupa otkrije, onda postoji. Ako se ne otkrije, ne znaci da ne postoji.



Re: Da li se sajt može provjerit na sigurnosne rupe(SQL injections...) 15.09.2006. u 10:52 · pre 245 meseci #3
Citat:
McKracken: 
Jedino sto moras imati na umu je da ako se rupa otkrije, onda postoji. Ako se ne otkrije, ne znaci da ne postoji.

Podvlacim.

Acunetix je jedan od najboljih alata za testiranje ali opet uz pomoc alata ne mozes sve da otkrijes ...
Potpis
“If you think you are too small to make a difference, try sleeping with a mosquito.” - Dalai Lama
XIV
Re: Da li se sajt može provjerit na sigurnosne rupe(SQL injections...) 16.09.2006. u 15:51 · pre 245 meseci #4
Intrersantna tema.
Volio bi da cujem vise mislenja i iskustva za sigurnost koda.
Konkretno me zanima koje su mogucnosti da neko napravi stetu preko direktnog zapisivanja podataka iz forme u bazu.
Recimo insert into baza $_POST['bla'].
Ili koje mjere bezbednosti treba preuzeti pri upload fajlova.
Iskreno se nadam da ce se iz ove teme razviti konstruktivni dijalog.
Re: Da li se sajt može provjerit na sigurnosne rupe(SQL injections...) 16.09.2006. u 16:50 · pre 245 meseci #5
Citat:
glavince: Intrersantna tema.
Volio bi da cujem vise mislenja i iskustva za sigurnost koda.
Konkretno me zanima koje su mogucnosti da neko napravi stetu preko direktnog zapisivanja podataka iz forme u bazu.
Recimo insert into baza $_POST['bla'].
Ili koje mjere bezbednosti treba preuzeti pri upload fajlova.
Iskreno se nadam da ce se iz ove teme razviti konstruktivni dijalog.

Prvo preko ovog koda INSERT INTO baza $_POST['bla'] može se koristiti SQL injection ako nije obrađen strnig.
Što se tiče uploda failova ja npr. za galerije ograničavam amo na jpg, gif,bmp slike ali pored toga koristim i ograničenje veličine failova i još neke druge sitne modifikacije.
Rizična stvar preko uploada je ako ga npr ne ograničiš na određene failove onda može neko uploadovati PP skriptu sa bilo kojim kodom.
Re: Da li se sajt može provjerit na sigurnosne rupe(SQL injections...) 16.09.2006. u 17:03 · pre 245 meseci
izmenjeno 1 put, poslednji put glavince 16.09.2006. u 17:23
  1. glavince16.09.2006. u 17:23zapis iz teksta poruke
#6
Za oradzivanje stringa koristim:
addcslashes() i mysql_real_escape_string()
$string = addcslashes(mysql_real_escape_string($_GET['string']));
E sad me zanima koja je opasnost ako se string ne obradi.
Ako moze neki primer kako je moguce da neko izmeni ili izbrise nesto u bazi preko forme za input.
I kako bi izgledao $string koji bi bio stetan za podatke u bazi.
Re: Da li se sajt može provjerit na sigurnosne rupe(SQL injections...) 17.09.2006. u 21:54 · pre 244 meseca #7
Testirao sam sledeci kod na PHP 4.3.10 i 5.0.4 i izgleda da ove verzije imaju ugradzenu zastitu od nezeljenih mysql injectiona.
Code:

<?php
echo $_POST['u']."<br>";
echo addslashes($_POST['u'])."<br>";
echo mysql_real_escape_string($_POST['u'])."<br>";
echo addslashes(mysql_real_escape_string($_POST['u']))."<br>";
?>
<form name="test" method="post">
<input type="text" name="u" value="' OR ''='">
<input type="submit" name="ok">
</form>

Output:
\' OR \'\'=\'
\\\' OR \\\'\\\'=\\\'
\\\' OR \\\'\\\'=\\\'
\\\\\\\' OR \\\\\\\'\\\\\\\'=\\\\\\\'
Re: Da li se sajt može provjerit na sigurnosne rupe(SQL injections...) 18.09.2006. u 00:54 · pre 244 meseca #8
Citat:
glavince:
E sad me zanima koja je opasnost ako se string ne obradi.
Ako moze neki primer kako je moguce da neko izmeni ili izbrise nesto u bazi preko forme za input.
I kako bi izgledao $string koji bi bio stetan za podatke u bazi.


Na primer, selektuješ korisnika sledećim kodom:

Code:
$user = $_POST['user'];
$pass = $_POST['pass'];
$sql = mysql_query("SELECT FROM users WHERE user = '$user' AND pass = '$pass' LIMIT 1");
...


...ako ti neko u $pass ubaci: ' OR 1=1 OR neko_polje = 'neka_vrednost
dobićeš sledeći query:
$sql = mysql_query("SELECT FROM users WHERE user = '$user' AND pass = '' OR 1=1 OR neko_polje = 'neka_vrednost' LIMIT 1");

...a čim je 1 = 1 onda je uslov ispunjen i korisnik će biti selektovan. Ako obradiš string onda će MySQL vratiti grešku prilikom napada, ili tako nešto :D

p.s. Ovo pišem napamet ali u principu to je to :)
Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: Da li se sajt može provjerit na sigurnosne rupe(SQL injections...) 18.09.2006. u 09:36 · pre 244 meseca
izmenjeno 1 put, poslednji put sale83 18.09.2006. u 09:49
  1. sale8318.09.2006. u 09:49zapis iz teksta poruke
#9
Citat:
glavince: Testirao sam sledeci kod na PHP 4.3.10 i 5.0.4 i izgleda da ove verzije imaju ugradzenu zastitu od nezeljenih mysql injectiona.
Code:

<?php
echo $_POST['u']."<br>";
echo addslashes($_POST['u'])."<br>";
echo mysql_real_escape_string($_POST['u'])."<br>";
echo addslashes(mysql_real_escape_string($_POST['u']))."<br>";
?>
<form name="test" method="post">
<input type="text" name="u" value="' OR ''='">
<input type="submit" name="ok">
</form>

Output:
\' OR \'\'=\'
\\\' OR \\\'\\\'=\\\'
\\\' OR \\\'\\\'=\\\'
\\\\\\\' OR \\\\\\\'\\\\\\\'=\\\\\\\'



1)Na to sto mislis da PHP ima zastitu to je ovo(php.ini):
Code:

;PHP.ini
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On

Naravno to je odlicno :)


2) Nemas potrebu da koristis addslashes u kombinaciji sa mysql_real....
Code:

addslashes(mysql_real_escape_string($_POST['u']))."<br>";


dovoljno je samo:
Code:

mysql_real_escape_string($_POST['u']);



3) Mada I dalje sto se tice ispravnosti ovaj kod nije potpuno siguran:
Code:

mysql_real_escape_string($_POST['u']);


Pitas se zasto ???


Odgovor:

Funkcija mysql_real_escape_string() ocekuje da joj se prosledi STRING dok svako moze da joj proseledi Array i naravno tu ce aplikacija da pukne..


Dobijes ovaku gresku
Code:

Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in ...



Znaci kod i dalje nije siguran ako govorimo o programiranju gde je sve bitno sto se tice S ...


Zato treba proveriti sta je korisnik posalo putem POST/GET/COOKIEs

Code:

//recimo jako dobro dodje ako hoces da izbegnes pomenutu gresku sa Array :)
mysql_real_escape_string(is_string($_POST['u']));


....

Ma o sigurnosti mozes dosta da se pise....

Toliko od mene...
Poz
sale
Potpis
Sto mozes danas ne ostavljaj za sutra!
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme