Türkiye'nin En Eski Webmaster Forumu İyinet'e Hoşgeldiniz!

Php scriptler ve güvenlik

sanal

0
Onaylı Üye
Üye
Katılım
1 Mayıs 2005
Mesajlar
60
Açılan Konu
4
Tepki puanı
0
Merhaba Arkadaşlar,
Ben yeni yeni php öğreniyorum.Sizlere sormak istediğim kendi yazdığınız php scriptleriyle ilgili ne tür güvenlik tedbirleri alıyorsunuz ?
Bu önlemleri başlıklar altında toplasak ve sonra sınıflandırıp bu topic i de sticky yapsak ne güzel olurdu. :p
İlgilenen arkadaşlara şimdiden teşekkür ederim.
 

graf von beelzebub

0
Onaylı Üye
Üye
Katılım
14 Mart 2005
Mesajlar
274
Açılan Konu
4
Tepki puanı
0
yeni öğreniyorum diyorasn eb şata bunlara dikkat et derim:
1- mesela, kategori.php gib bir sayfan kategori.php?id=25 seklinde, url'den gelen bilgiyi alması, ona gore icerik gostermesi gerekiyosa mutlaka sayfa basında gelen degerin kontrolunu yap, bu hem bilimum guvenlik sorununu ortadan kaldırır, hem olası sql injection yontemlerine karsı korunmus hemde kodun daha stabil olur, soyleki:
PHP:
<?php
# KATEGORI.PHP
if(empty($_GET[id]) || $_GET[id] == '' || (integer)$_GET[id] == 0) {
    die('URL\'de oynama yapmaya kalkismayiniz!');
    // veya header('location: /index.php'); falanda olabilir
} else {
    $kategori_id = (integer)$_GET[id];
}
?>

boylece URL'den yapılacak bilimum seye karsı korunmus olursun.
integer kontrolunu sadece url'deki degiskenden gelen deger ornekteki gibi numeric se yap, lakin kişi URL'den senın id olmasını ıstedıgın kısma string girmisse, php dosyanda yapacagın kontrolde integer halıne bakarsan stringler genelde 0 olur (egerki 1dsada seklindeyse 1 olur), boylece bunuda onleyebilirsin (genelde 0 id olarak falan kullanılmaz zaten)

2- her zaman (php.ini'de register_globals on olsa bile) mesela formdan "isim" adında olan alandaki degeri scriptinde $isim seklinde degil, $_POST[isim] seklinde karsıla, gerkli kontrol ve duzenlemeleri yaptıktan sonar string/deger ' de, $isim e sevirip oyle kullan derim.)

3- yaptıgın if, switch gibi kontrollerde kesinlikle olabilecek her durum icin yapılacak bir islem / belirlenecek bir deger veya gosterilecek bir mesaj olsun.

guvenlik konusunda sordugun icin bu kadar yazıyorum, esasta bu konularda yazılabilecek cok ipucu / puf nokta tarzında şey var yeni baslayanlar icin, kolay gelsin :)
 

ZeuQma

0
Onaylı Üye
Üye
Katılım
21 Ekim 2004
Mesajlar
0
Açılan Konu
7
Tepki puanı
0
Scriptlerde güvenlik demek matematikdeki gibi her ihtimali göz önünde bulundurmak demektir,

Form ile veri taşırken veya sayfadan sayfaya geçerken explorer adres şubugunda oynama yapılabileceğini, özel bi program yazılıp sitenizin belirli bir sayfasının çalıştırılabileceğini vs.. düşünerek hareket etmeli ve en doğru sonuca ulaşmayı sağlamalısınız. Form yolu ile sayfadan sayfaya veri taşırken mümkün olduğunca post methodu kullanılmalı ama profesyonellerin de olduğu unutulmamalıdır, hatta en az sizin kadar bilgisi ve mantığı olan kişilerin sitenizi ziyaret ettiğini düşünün ki göze çarpmaz diye düşündüğünüz şeylerin görülebileceğini unutmayasınız :)
 

cpa

0
Onaylı Üye
Üye
Katılım
29 Temmuz 2004
Mesajlar
102
Açılan Konu
14
Tepki puanı
0
graf von beelzebub ben 1. dediğine pek dikkat etmiyorum bu ne gibi güvenlik açığına neden olabilir? Mesela ben id numarasına göre veritabanından select yaptırıyorsam ve kategorilerin id lerinin sütunlarıda integer tanımlıysa adam oraya string girerek bunu nasıl kötüye kullanabilir? Sırf meraktan sordum.
 

worshiphim

0
Onaylı Üye
Üye
Katılım
16 Ocak 2005
Mesajlar
670
Açılan Konu
95
Tepki puanı
0
Konum
Suisse
browsera,forma 'or=' ya da 'or=true' gibi şeyler yazarak sql injection açığı var ise (!) erişim sağlanır vb
 

yoktur

0
Onaylı Üye
Üye
Katılım
28 Ekim 2004
Mesajlar
2,366
Açılan Konu
90
Tepki puanı
1
Konum
/etc/istanbul.c
çok süper güvenlik olsun dersende Curl modülü ile çalış en iyi çözüm
 

Angelo

0
Onaylı Üye
Üye
Katılım
13 Aralık 2004
Mesajlar
9,603
Açılan Konu
164
Tepki puanı
106
Konum
AZ
Kod:
$query = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid'";

Browserdan girilecek deger;
http://mysite/code.php?uid=' or uid like 'admin

Gibi basit bir ornekle magic_quotes kapali ve register_globals acikken sorgu

UPDATE usertable SET pwd='$pwd' WHERE uid='' or uid like 'admin'";

donusmektedir ve superuser'in sifresini onaysiz degistirebilir.
 

graf von beelzebub

0
Onaylı Üye
Üye
Katılım
14 Mart 2005
Mesajlar
274
Açılan Konu
4
Tepki puanı
0
@cpa
zaten yazmışım adam sql injection yapabilir hiçbir kontrolden geçirmessen diye hemen ardındaki cümlede.2 arkadaşta örneklerle anlatmış nası olacagını zaten :) tabi senin veritabanındaki tablo isimlerini alanlarını kim bilir diye dusunebilirsin ama sql'den cok iyi anlayan biri hic beklemedigin seylere sebep olabilir, ne biliyim bi sekilde subquery islettirir sen farkında olmadan istemedigin seyler ortaya cıkar.sonucta maksat güvenlik ve her durumu göz onunde bulundurmak gerekiyo, illaki oyle yapacaksın diyede birsey yok sonucta...
 

sanal

0
Onaylı Üye
Üye
Katılım
1 Mayıs 2005
Mesajlar
60
Açılan Konu
4
Tepki puanı
0
Selam ,
Vakit ayırıp bilgilerini paylaşan sevgili graf von beelzebub ,ZeuQma ,yoktur ,Angelo ,tahtakale arkadaşlara teşekkür ederim.
Oldukça faydalı oldu benim için.
İyi çalışmalar...
 

cpa

0
Onaylı Üye
Üye
Katılım
29 Temmuz 2004
Mesajlar
102
Açılan Konu
14
Tepki puanı
0
Angelo arkadaşımız güzel bir örnekle anlatmış. Benim istediğimde buydu. "magic_quotes kapali ve register_globals acikken" bölümünü öğrenmiş oldum. Çünkü daha önce yaptığım denemelerde php de otomatik olarak dışarıdan alınan veri içinde " ve ' karakterleri \ ile etkisiz hale getiriyordu ve sql injection imkansız hale geliyordu. Ben de bu yüzden kontrole gerek duymuyordum. Şimdi ne zaman tehlikeli olduğunu öğrenmiş oldum. Ama çoğu serverda magic_quotes açık olduğu için hala tırnak kontrolü yaptırmayı gerekli bulmuyorum. 4 milyon görüntülemesi olan bir site için performansı düşürebilir. Nasıl olsa php kendi kontrolünü yapıyor.
 
Üst