Bydigi Forum
Geri Git   Bydigi Forum > Very Important Person Area > Web Tasarımı / Php, Asp, Perl, Cgi Scriptler

Kayıt Ol SSS
Eski 11-02-2007, 10:54 AM   #1 (permalink)
 
Giriş Tarihi: May 2006
Konum: Localhost
Yaş: 3
Mesaj: 3,539
Üye No: 3646
Cinsiyeti : Bay
İtibar Gücü: 864
Rep Puanı : 85819
Rep Derecesi
ByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond repute
Wink Basit PHP Güvenligi


Basit PHP Güvenliği:
PHP script'lerinizin 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 script'leriniz her zaman güvenlik problemleri ile karşı karşıya olacaktır. Bu makale'de bu iki işlem ile ilgili yapılması gerekenler anlatılıyor.

Bütün Girileri Filtreleyin:
Script'leriniz 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 fonksiyon'unuz 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 script'imize tehlikeli verilerin eklenmesi riski büyük ölçüde azaltılmış oldu. valid_eposta() fonksiyon'u PHPit Code Snippet veritabanı ( [Linkleri Sadece Üyelerimiz Görebilir... ] da bulunabilecek olan standart 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 mysql_real_escape_string() ( [Linkleri Sadece Üyelerimiz Görebilir... ] fonksiyon'unu 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ı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 tag'leridir. Bunu yapmanın en kolay yolu bütün HTML'i escape işlemine sokan htmlentities() (http://php.net/htmlentities)fonksiyon'udur:

<?php
echo htmlentities($_GET['eposta']);
?>


Bu kod (saldırganın sayfalarınıza JavaScript kodları eklemesine ve diğer kullanıcıların cookie'lerini ç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 fonksiyon'unun üçüncü argümanı'nı (encoding/charset tipi) da kullanmalısınız. Google'da HTML'i escape işleminde düzgün encoding ayarı yapmadığı için XSS saldırısından etkileniyordu ( [Linkleri Sadece Üyelerimiz Görebilir... ]. Google bu açığı 1 aralık'ta kapattı. Basitçe, her zaman encoding tipini belirlemelisiniz:




<?php
echo htmlentities($_GET['eposta'], ENT_QUOTES, 'UTF-8');
?>


Eğer bütün HTML tag'lerini filtrelemek istemiyorsanız, bazı tag'lere izin vermek istiyorsanız strip_tags() fonksiyon'unu kullanabilirsiniz. Fakat bu, <script> tag'lerini 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 fonksiyon'unuzu yazmanız (veya internet'teki yüzlerce hazır fonksiyon'dan 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 format'lamanızda kullanılabilecek olan kendi HTML kodunuzu yaratabilirsiniz. Kendi HTML kodunuzu yaratma ile ilgili olarak Create your own BBCode ( [Linkleri Sadece Üyelerimiz Görebilir... ], using PHP dokümanına göz atabilirsiniz.

Sonuç :
Bu makalede PHP programlamının iki temel ilkesi olan girdi filtreleme ve çıktı filtreleme'den bahsettim. Eğer bu ikisini doğru olarak yapabilirseniz çok güvenli bir PHP script'ine 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 fonksiyon'lar yazmanız.

PHP güvenliği ile ilgili daha fazla bilgiye ihtiyaç duyuyorsanız aşağıdaki sitelerine göz atabilirsiniz:

- PHP Security Consortium ( [Linkleri Sadece Üyelerimiz Görebilir... ]) - Çok sayıda bilgi içeren mükemmel bir güvenlik rehberi. Mutlaka okunmalı.
- Essential PHP Security ( [Linkleri Sadece Üyelerimiz Görebilir... ] Chris Shiflett'in Essential PHP Security kitabından bilgiler. Kitabın bir kaç bölümü ücretsiz
- Hardened PHP ( [Linkleri Sadece Üyelerimiz Görebilir... ] Güvenlik bültenlerine yer veriliyor
-------
PHP Güvenliği Kaynak: PHP Security - Basic PHP Security ( [Linkleri Sadece Üyelerimiz Görebilir... ])


Not : Anlatım Alıntıdır.


ByMixture is offline  
Eski 11-02-2007, 10:55 AM   #2 (permalink)
Nick 99
 
Mesaj: n/a
Üye No:
Cinsiyeti :
Varsayılan


emeğine sağlık keke

 
Eski 11-02-2007, 10:56 AM   #3 (permalink)
 
Giriş Tarihi: May 2006
Konum: Localhost
Yaş: 3
Mesaj: 3,539
Üye No: 3646
Cinsiyeti : Bay
İtibar Gücü: 864
Rep Puanı : 85819
Rep Derecesi
ByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond reputeByMixture has a reputation beyond repute
Varsayılan


sağolasın MaWZeR

__________________
ByMixture is offline  
 


Konu Araçları
Mod Seç

Gönderme Kuralları
Yeni konular açabilirsiniz --> izin yok
Yanıtlar gönderebilirsiniz --> izin yok
Eklentiler gönderebilirsiniz --> izin yok
Mesajlarınızı düzenleyebilirsiniz --> izin yok

vB koduAçık
SimgelerAçık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı

Popüler Konular:
Bydigi Forum'un En Popüler Konuları
Sizin İçin Seçtiklerimiz-1:

Norton AntiVirus 2008
Panda Antivirus & Firewall 2008
AVG Anti-Virus Free Edition 8.0.100
McAfee VirusScan Enterprise 8.5i
Avast! 4 Professional Edition 4.8.1169
Kaspersky Internet Security 7.0.1.325
Anti-Porn 10.4.11.15
BitDefender Internet Security 11.0.9 (2008)
Eset Smart Security 3.0.642
Ad-Aware 2008

Sizin İçin Seçtiklerimiz-2:

Şeftali Yetiştiriciliği
Ekolojik Tarım ve Hayvancılık
Süt Verimini Etkileyen Faktörler
Dört barajda su bitmek üzere
Karbondioksit salımı yüzde 50’den çok artacak
VAN (Wan) Tarihi
Amed (Diyarbakır) Tarihi
İç Anadolu Hakkında Genel Bilgi
Kültür ve Turizm Bakanlığı müfettiş yardımcılığı
2008 yılı icra müdür ve yardımcılığı sınav ilanı

Sizin İçin Seçtiklerimiz-3:

Siz Hangi Yemeksiniz ?
Doğum gününüze göre hangi hayvansınız?
Doğum Tarihinize Göre Renginiz!
Bebeklerde Gaz Çıkarma
Virüs taşıyan keneler dehşet saçıyor
Şiddetin genlerle ilişkisi olabilir
Karpuz Viagra Etkisi Yapıyor
Panasonic Sony'yi tahtından etti!
Mehmet Atlı - Wenda 2008
grup seyran - 2008


Benzer Konular

Konu Konuyu Başlatan Forum Yanıt Son Mesaj
Süper php Scriptleri ByMixture Web Tasarımı / Php, Asp, Perl, Cgi Scriptler 9 19-03-2008 05:14 PM
PHP Dili bereday21 Php Scriptler 32 26-02-2008 04:59 PM
Php Nuke Kurulumu Resİmlİ Anlatim ByMixture Web Tasarımı / Php, Asp, Perl, Cgi Scriptler 1 04-11-2007 06:57 PM
PHP Geliştirme Ortamı Zend Studio bereday21 Php Scriptler 1 04-11-2007 06:55 PM
Web te free host ta son Tum siteler Şevger Web Hosting / Domain 5 20-02-2007 06:03 PM


Forum saati Türkiye saatine göredir. GMT +2. Şuan saat: 03:19 AM .
(Türkiye için GMT +2 seçilmelidir.)


Powered by vBulletin Version 3.6.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
Copyright ©2006 - 2008 Bydigi Forum ®, All Rights Reserved

Bir Forum sitesi olduğumuzdan, kullanıcılar önceden onay almadan her türlü görüşlerini yazabilmektedir.
Yazılanlardan dolayı oluşabilecek her türlü yasal sorumluluk, yazan kullanıcılara aittir.
Yinede sitemizde yasalara aykırı herhangi bir durum görürseniz; Lütfen, bydigi@gmail.com'a yada İletişim'e bildiriniz.
Mesajınız incelenip, kısa bir süre içerisinde gereken müdahale yapılacaktır.