From: Php (php@kakalak.org)
Date: Sun 16 Feb 2003 - 13:12:14 EET
Merhaba,
Guvenlikle ilgili bir sorum olacak. Belki programlamaya da
girebilir bu soru :)
Production web serverlar uzerinde kullanilmak uzere
bir kontrol panel hazirladim. Mantik olarak soyle calisiyor:
1. pgsql uzerinde sadece tek kullanici tarafindan gorulebilecek
sekilde konfigure edilmis bir veritabani var.
2. Bu veritabani uzerinde yapisi kabaca
COMMAND
PARAMETER1
PARAMETER2
...
seklinde bir tablo var (diger tablolar kullanicilar/domainler
ile ilgili kurulum bilgilerini iceriyor)
3. ssl arkasindaki bir php script ile kullanici islemlerini
yaptiriyorum ve yeni kullanici acilmasi, domain acilmasi
silinmesi, parola degistirilmesi gibi islemleri buraya
daha onceden belirledigim sayisal opcode'lar ile yaziyorum.
4. Server uzerinde daemon olarak calisan bir php script
daha var. Bu script 3-4 saniyede bir veritabanini
kontrol ediyor, eger yeni bir COMMAND eklenmisse
geregini yapiyor ve konfigurasyon dosyalarina yansitiyor.
---------------
bu sistemin muhtemel zayifliklarini soyle cikardim:
--------------
a. User authentication: useri cok iyi tanimak ve
session stealing gibi basit metodlara pabuc
birakmamak gerekiyor. Bu konuda php/apache/ssl
uclusune guveniyorum. Bu konuda yazilmis
ornek scriptleri ve dokumantasyonu bolca okudum.
Oradan sorun cikacagini sanmam
b. Veritabanina baska turlu ulasim: pgsql sadece
localhost'a bagli. Ve tanimladigim veritabanina
sadece tek kullanici ulasabiliyor. Ayrica super
user sifresini gizli tutuyorum ve herhangi bir
script icinde kullanmiyorum.
c. Veritabanina bogus command yazdirma:
her seviyede, gerek client gerek daemon tarafinda
gelen opcode'u kati bir switch statement icerisinden
geciriyorum. Veritabanindan gelen hicbir string
asla dogrudan baska bir sql, eval ya da exec
icinde kullanilmiyor. Gerek veritabanina gonderirken
gerek retrieve ederken add_slashes ve buffer uzunlugu
kontrollerini yapiyorum. Silinecek userlerin
belirli bir gruba ait olup olmadigina bakiyorum.
d. daemon olarak calisan script modification:
daemon olacak calisan script tum ftp tree'lerinin
disinda. owner'i root ve sadece 0400
e. yetkili user olusturma:
yeni acilan tum kullanicilar belli bir gruba otomatikman
baglaniyor. Ve bu grup proftpd ile belli bir tree icine
hapsediliyor. Ayrica shell olarak /bin/false veriyorum
f. client php scripti yine herkesin ftp agacinin disinda
ayri bir ssl virtual host olarak tanimli. Diger
dosyalarin aksine owner'i apache ve sadece
"0400" set edilmis durumda.
Bunlar haricinde dikkat etmem gereken baska
nokta var mi? Cunku bu script user ekleme/silme
ftp sifresi degistirme, name server cfg
dosyalarina dogrudan erisim gibi onemli
isler yapiyor.
Saygilar.