İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa] İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa] İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa]
 Site Haritası 
 
Site Map
Ana SayfaYeriniz | Ana Sayfa | Makaleler | Güvenlik ve Kriptografi | PHP Güvenliği - Basit PHP Güvenliği

Diğer Yazılar
Simetrik Kriptografi
Asimetrik Kriptografi
SSH Nedir?
Port Nedir?
PKI ve Dijital İmza Uygulamaları
IPsec ile Sanal Özel Ağ Oluşturma
IPSec Nedir? Ne değildir.
Kablosuz Ağlarda Saldırı ve Güvenlik
Ağınızın Güvenliğini Sağlamada 10 önemli adım
TOR ile Internet’te Kimlik Gizleme


E-posta Gönderin Yorum Yazın
Güvenlik Kodu:5757Güvenlik Kodu:5757Güvenlik Kodu:5757Güvenlik Kodu:5757




En Son Okunan 10 Makale
  1. E-iş Terminoloji Sözlüğü
  2. Motivasyon İpucları
  3. Teknolojik Hastalik: Reklam Korlugu
  4. Büyüklere Masallar
  5. Kelimelerin Önemi
  6. E-Kitap
  7. Flash Oyunları
  8. Web Araçları
  9. AJAX a Giriş
  10. Port Nedir?
 
PHP Güvenliği - Basit PHP Güvenliği >
Yazı Tipi KüçültYazı Tipi BüyütAna SayfaYazıcıdan ÇıkarPDF Belgesi Olarak GörüntüleFavorilerime EkleArkadaşıma Tavsiye EdeceğimRTF (Word Dokümanı) olarak görüntüle

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 girdileri 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:
$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ında 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() standart 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:
$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:
$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() fonksiyon'udur:
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. Google bu açığı 1 aralık'ta kapattı. Basitçe, her zaman encoding tipini belirlemelisiniz:
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,


Not: Yazılar konusundaki yorumlarınız için lütfen Yorum Yazın bölümümüzü kullanın.

Yazar : Ertan Kurt
Son Güncelleme : 23 Şubat 2006, Perşembe
Sayfa Sürümü : 1
Okunma Adedi : 6,454
Son Okunma : 2017-07-22 04:27:29
Kaynaklar : http://www.olympos.org/article/articleview/1625/1/10/
php_guvenligi___basit_php_guvenligi

 Kablosuz Ağlarda Saldırı ve Güvenlik PHP Güvenliği - Basit PHP Güvenliği Ağınızın Güvenliğini Sağlamada 10 önemli adım
© [Site Haritası]
| Makaleler | Seyir Defteri | Kaynaklar | İndirin | İletişim |

RSS dosyasını görmek için tıklayınız. RSS dosyasını görmek için tıklayınız.XML versiyonu için tıklayınız WAP versiyonu için tıklayınız Bu site DyNA İçerik Yönetim Sistemi üzerinde çalışmaktadır.
İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa
ismail kırbaş ile web sitesi tasarimi sitemap ismail kırbaş ile web sitesi tasarimi sitemap
  Sitemizde 3 kişi çevirimiçi | Bugün =128 | Dün =213 | Bu Ay=4,938 | Günlük En Fazla=1,109 tekil ziyaretçi