Sehri-Paylasim
Hosgeldiniz
Sehri-Paylasim
Hosgeldiniz
Sehri-Paylasim
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Sehri-Paylasim


 
AnasayfaAramaLatest imagesKayıt OlGiriş yap
Giriş yap
Kullanıcı Adı:
Şifre:
Beni hatırla: 
:: Şifremi unuttum
En iyi yollayıcılar
Admin
Genel PHP Güvenliği Vote_lcapGenel PHP Güvenliği Voting_barGenel PHP Güvenliği Vote_rcap 
daba31
Genel PHP Güvenliği Vote_lcapGenel PHP Güvenliği Voting_barGenel PHP Güvenliği Vote_rcap 
hidelgo41
Genel PHP Güvenliği Vote_lcapGenel PHP Güvenliği Voting_barGenel PHP Güvenliği Vote_rcap 

 

 Genel PHP Güvenliği

Aşağa gitmek 
YazarMesaj
Admin
Kurucu / Root
Admin


Mesaj Sayısı : 552
Kayıt tarihi : 09/07/10
Yaş : 41
Nerden : Bursa

Genel PHP Güvenliği Empty
MesajKonu: Genel PHP Güvenliği   Genel PHP Güvenliği EmptyC.tesi Eyl. 24, 2011 8:16 am

Genel PHP Güvenliği

PHP scriptlerinizin güvenli olduğundan emin olmanız için ilk olarak
temel kuralları yerine getirmeniz gerekiyor: kullanıcı girdilerinin
(input) filtrelenmesi ve çıktıların (output) kontrolü. Eğer bu ikisini
doğru olarak yapmıyorsanız scriptleriniz her zaman güvenlik problemleri
ile karşı karşıya olacaktır. Bu makalede bu iki işlem ile ilgili
yapılması gerekenler anlatılıyor.

Bütün girdileri filtreleyin
Scriptleriniz harici bir kaynaktan girdi okuduğunda, bu verinin
tehlikeli olduğu varsayılmalı ve güvenilmemelidir. Güvenilmemesi gereken
değişkenlerden bazıları: $_POST, $_GET, $_REQUEST ve hatta pek mümkün
görünmese de önemli veriler içerebilecek olan $_SERVER .
Tehlikeli bir değişkenden gelen veriyi işlemlere tabi tutmadan önce ilk
olarak önce onaylanamanız ve filtrelemeniz gerekmektedir. Onaylama
işlemi ile sadece sizin istediğiniz verileri içerdiğinden emin
olabilirsiniz. Örneğin bir eposta adresi bilgisi bekliyorsanız, onay
fonksiyonunuz girilen verinin doğru bir eposta adresi olup olmadığını
kontrol etmeli.
Hemen basit bir örnekle açıklayalım. Aşağıdaki kodda ilk olarak $_POST
değişkeninden e-posta adresini alıyorum ve sonra veriyi onaylama
işlemine sokuyorum:
<?php
$eposta = $_POST[eposta]; # Burada veri hala TEHLİKELİ durumda
// Validate e-mail
if (valid_eposta($eposta) == false) {
// Geçerli bir adres değil
die(Geçerli bir eposta adresi değil!);
}
?>
Veriyi kontrol ederek scriptimize tehlikeli verilerin eklenmesi riski
büyük ölçüde azaltılmış oldu. valid_eposta() fonksiyonu nda da
bulunabilecek olan standar bir onay işlemidir
Verimiz daha güvenli olsa da işimiz daha bitmedi çünkü hala veriyi
MySQL veritabanına yerleştirmek istiyoruz ve bu işlemden önce de bazı
kontroller yapmamız gerekiyor. PHP tüm önemli karakterlerin escape
edildiği standart fonksiyonunu sunar. Diğer bir yöntem ise SQL
sorgusunda veriyi her zaman kesme imleri arasına yerleştirin.
Önceki örneğimize devam edelim:
<?php
$eposta = $_POST[eposta]; # Burada veri hala TEHLİKELİ durumda
// Validate e-mail
if (valid_eposta($eposta) == false) {
// Geçerli bir adres değil
die(Geçerli bir eposta adresi değil!);
}
// eposta ın veritabanı için güvenli hale getirilmesi
$eposta = mysql_real_escape_string($eposta);
// Artık güvenli!
?>
Artık elimizdeki eposta verisi veritabanına güvenli bir şekilde
işlenebilir. Hatalardan kaçınmak için tehlikeli değişkenlere bir ön ek
verilebilir, örneğin:
<?php
$t_eposta = $_POST[eposta]; # Tehlikeli
// Onay işlemi
$g_eposta = mysql_real_escape_string($d_eposta);
?>
Bu şekilde tehlikeli bir veriyi işleme sokarken ön tarafındaki t_ eklentisi ile hemen farkına varabilirsiniz.
Çıktıların filtrelenmesi
Girdilerde olduğu gibi dışarıya sunulan tüm verilerin de (güvenli
olarak filtreleyip veritabanına işlediğiniz verilerin dahi)
filtrelenmesi gerekmektedir.
Filtrelenmesi gereken en önemli şey probleme yol açabilecek olan HTML
tagleridir. Bunu yapmanın en kolay yolu bütün HTMLi escape işlemine
sokan fonksiyonudur:
<?php
echo htmlentities($_GET[eposta]);
?>
Bu kod (saldırganın sayfalarınıza JavaScript kodları eklemesine ve
diğer kullanıcıların cookielerini çalmasını sağlayan) muhtemel XSS
(çapraz site betik çalıştırma – cross site scripting) saldırılarını
kaldırır. Eğer mümkünse, htmlentities fonksiyonunun üçüncü argümanı ı
(encoding/charset tipi) da kullanmalısınız. Googleda HTMLi escape
işleminde düzgün encoding ayarı yapmadığı için . Google bu açığı 1
aralık a kapattı. Basitçe, her zaman encoding tipini belirlemelisiniz:
<?php
echo htmlentities($_GET[eposta], ENT_QUOTES, UTF-Cool;
?>
Eğer bütün HTML taglerini filtrelemek istemiyorsanız, bazı taglere izin
vermek istiyorsanız strip_tags() fonksiyonunu kullanabilirsiniz. Fakat
bu, <script> taglerini filtreleseniz dahi Javascript ekleme
açıklarına karşı bir güvenlik problemi içerebilir. ör ( <div
onclick=”alert(Hi!);”> .
Diğer bir yöntem de sadece sizin istediklerinizi filtrelemenize
yarayacak kendi fonksiyonunuzu yazmanız (veya internet eki yüzlerce
hazır fonksiyondan birini kullanmanız). Bu bazen en iyi yöntem olabilir
fakat herhangi bir şeyi unutmanız durumunda güvenlik problemlerine yol
açabilir.
Son olarak, çıktıyı filtrelemenin en iyi yolu, üç argümanı ile birlikte
htmlentities() fonksiyonunun kullanımı fakat bununda işlevi sınırlı
(ör: formatlama olmaması) kalabilir. Buna çözüm olarak verileri
formatlamanızda kullanılabilecek olan kendi HTML kodunuzu
yaratabilirsiniz. Kendi HTML kodunuzu yaratma ile ilgili olarak
dokümanına göz atabilirsiniz.
Sonuç
Bu makalede PHP programlamının iki temel ilkesi olan girdi filtreleme
ve çıktı filtrelemeden bahsettim. Eğer bu ikisini doğru olarak
yapabilirseniz çok güvenli bir PHP scriptine doğru yola çıkmışsınız
demektir.
Verdiğim örnekler çok basit ve hantal. Escape işlemini
otomatikleştirmeniz iyi olabilir. Bunun için iyi bir yöntem gerekli
işlemleri yapan bir class veya fonksiyonlar yazmanız.
Sayfa başına dön Aşağa gitmek
https://sehripaylasim.yetkin-forum.com
 
Genel PHP Güvenliği
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» Olması Gereken Genel SM Profili
» Php de URL güvenliği
» E-Mail Güvenliği
» E-Mail Seçimi ve Güvenliği.
» Hotmail de güvenliği sıkılaştırıyor!

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
Sehri-Paylasim  :: Forum :: HTML, PHP, ASP, PERL-
Buraya geçin: