[ stefaneg @ 13.03.2006. 19:52 ] @
Pošto bih trebao da počnem da radim neki ozbiljni projekat, prvo mi je neophodno da utvrdim neke činjenice... o sigurnosti. Ono što sam uspeo da nađem pretragom ovog foruma je bilo u neku ruku poučno, ali da li je to sve na šta bih trebao obratiti pažnju? Ovaj link:
http://www.onlamp.com/pub/a/php/2003/03/20/php_security.html
je ostavljen u jednoj tema koje sam pročitao i dobio sam neke odgovore. E sad ono što me zanima:

sql injection: da li se može sprečiti primenom prostih metoda kao što je escape.ovanje prosleđeneih stringova ili proverom (i eventualnom konverzijom) promenljivih od kojih se očekuje da budu celobrojnog tipa? ako se prvi problem može rešiti sa addslashes() koja je namena mysql_real_escape_string().a?

chmod: zapravo koji bi chmod trebao biti postavljen na dir www, koji na config fajlove (tu podrazumevam one koji sadrže parametre konekcije baze), a koji na one kojima korisnik treba da pristupa direktno? Išao sam na ideju da korisnik može pristupiti samo osnovnom fajlu (index.php), a osalima preko njega (include().om, u zavisnosti šta se prosleđuje kao $_GET['action'], kao u recimo PHPNuke.u), a ako na neki fajl ode direktno, dobija redirekciju na index.php

forbidden area: da li je dovoljno sigurno prilikom login.a proveriti identičnost podataka sa onima u bazi i onda recimo staviti u sesiju podatke kao što su username i userid, a na početku skripte staviti samo session_start() i proveriti postojanje promenljive $_SESSION['username']? Da li ima potrebe menjati session.save_path (to sam malo pre pročitao negde)?

hotlinking: kako se sprečava? naravno, kada bih na sajt hteo staviti neke fajlove za download iz određenog dir.a, ne bih ostavljao apsolutne adrese do nih već bi download forsirao preko header() funkcije. Ali ako neko sazna za apsolutno adresu dira u kome se čuvaju fajlovi, šta onda?

upload: ako uradim neki sistem za upload.ovanje korisnikovih fajlova (slike, programi (šta ja znam)) na koji način se proverava "ispravnost" ovih fajlova? Mogu da dobijem atribut "vrsta fajla", i proverim da li je na listi dozvoljenih fajlova (npr image/jpeg, image/gif...), ali kako proveriti recimo da li je fajl čist od virusa? Ili to Apache autmoatski obavlja? Na šta još treba obratiti pažnju?

Ako sam malo smorio, izvinjavam se, ali bilo bi mi jako važno kada bih dobio odgovore na sva ova pitanja. Naravno ako sam nešto zaboravio (ne sumnjam), slobodno mi skrenite pažnju :,
[ kentabyte @ 14.03.2006. 18:43 ] @
hotlinking mislim da se moze uraditi i preko .htacces fajla tj konfigurisati htacces fajl da neko ne moze lako pristupiti fajlovima u odredjenom dir-u

funkcija addslashes() mislim da je dovoljno bezbedna za izvsavanje sql upita. Netreba zaboraviti da se posle addslashes() uradi i stripslashes() koja posle ocisti string upita.
[ Nemanja Avramović @ 14.03.2006. 18:55 ] @
strip_tags takodje, kad upisujes neki user input u bazu koji planiras da prikazujes na sajtu ;) Ovo skida tagove a mozes i tagove da pretvoris u "html-safe" (ne znam da li je to izraz): htmlspecialchars
[ stefaneg @ 15.03.2006. 19:39 ] @
Zar je to sve ? Hajde, profesionalci, na šta vi obraćate pažnju? Ili je to poslovna tajna
[ sale83 @ 16.07.2006. 11:21 ] @
Danas slucajno eto naletih na jedan sajt koji svaki pocetnik a bogme ima i onih koji nisu pocetnici treba da posete i da lepo i pazljivo procitaju..

Znaci upitanju je sajt gde je sve lepo (pa jos na Sprskom jeziku) objasnjeno sto se tice PHP-a i bezbednosti kod programiranja!!

Sajt:
http://phpsec.org/projects/guide/sr/



Poz
sale
[ SmilieBG @ 16.07.2006. 20:46 ] @
Samo da dodam sledece, sto nije bilo na prethodnom sajtu, a vezano za:

"upload: ako uradim neki sistem za upload..."

Apache ne radi sam proveru virusa. Dakle na tebi je da odradis proveru:

1. extenzije;
2. tipa fajla;
3. virus scanning;

Prva 2, koliko sam razumeo si shvatio. Za treci (virus scanning) imas opcije da izmenis apache i dodas mod za automatski virus scanning svakog fajla ili da to 'rucno' kroz PHP odradis, tipa:

Code:

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    /* izvrsi virus scanning */
    exec('/usr/virus_scanner $path.$uploadedfile', $res);
    if(preg_match('^Virus found$',$res))
    {
         unlink($path$uploadfile);  
         echo "fajl ima virus i obrisan je!";
    }
    echo "fajl uspesno uploadovan";
    }
   else {
   echo "Possible file upload attack!\n";
}


Mozda ima gresaka u codu gore, ali to je cisto da ti da ideju... Naravno, moras imati vise od shared hosting-a (sto se kontrole nad apachem i sistemom tice) da bi ovo gore napravio...

Poz,
Sale
[ Nemanja Avramović @ 11.11.2006. 08:59 ] @
Što se chmoda tiče, svuda 644 osim na fajlovima/folderima u koje upisuješ nešto (ili uploaduješ fajlove). Na tim fajlovima/folderima chmod 777 pod pretpostavkom da je server lepo podešen. Ako nisi siguran, mislim da i 646 vrši posao, nisam baš siguran (mada znam da radi )...