AKDENİZ FORUM


Ana Sayfa Benim Konularim Benim Mesajlarim
Geri git   AKDENİZ FORUM > VBulletin Destek & Webmaster Genel > Php, Asp, Flash, Java, Html
Kayıt ol Yardım Üye Listesi Arama Bugünki Mesajlar Bütün Forumları okunmuş kabul et

Php, Asp, Flash, Java, Html Php, asp, flash, java, html ve tüm web azılım dilleri hakkında bilgi paylaşımı yapabileceğiniz bölüm.

Tags: , , ,

Cevapla
 
Seçenekler
Alt 09-08-2007   #1
AnG€L
Normal Üye
 
AnG€L - ait Kullanıcı Resmi (Avatar)

Türkiyenin En Kaliteli Bilgi Paylasim Mekani AKdenizForum..
Kullanıcı Bilgileri
 
Üyelik Tarihi: Jun 2007
Nerden: İZMİR
Mesajlar: 2.194
Üye No: 14268
Extra Bilgiler
Tecrübe Puanı: 31
Rep Gücü : 188
Rep Derecesi : AnG€L has a spectacular aura aboutAnG€L has a spectacular aura about
İletişim
Standart PHP | Güvenlik Önlemleri

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- Kodu:

<?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ı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:

PHP- Kodu:

<?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- Kodu:

<?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() fonksiyon'udur:

PHP- Kodu:

<?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. Google bu açığı 1 aralık'ta kapattı. Basitçe, her zaman encoding tipini belirlemelisiniz:

PHP- Kodu:

<?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, 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 - Çok sayıda bilgi içeren mükemmel bir güvenlik rehberi. Mutlaka okunmalı.
- Essential PHP Security - Chris Shiflett'in Essential PHP Security kitabından bilgiler. Kitabın bir kaç bölümü ücretsiz
- Hardened PHP - Güvenlik bültenlerine yer veriliyor




AŞK BİTER
PAYLAŞIM BİTMEZ...

AkdenizForum Toolbar Sitemizi Daha İyi Kullanmak İstiyorsanız Daha Kolaylıkla Sizde İndirin [ÜYE OLMADAN LİNKLERİ GÖREMEZSİNİZ. BURAYA TIKLAYARAK BEDAVA ÜYE OLUN...]
AnG€L isimli üyemiz çevrimdışıdır. (Offline)   Alıntı ile Cevapla
Alt 01-16-2008   #2
briselies
Amatör Üye
 
briselies - ait Kullanıcı Resmi (Avatar)

Türkiyenin En Kaliteli Bilgi Paylasim Mekani AKdenizForum..
Kullanıcı Bilgileri
 
Üyelik Tarihi: Jan 2008
Mesajlar: 29
Üye No: 57213
Extra Bilgiler
Tecrübe Puanı: 17
Rep Gücü : 50
Rep Derecesi : briselies is on a distinguished road
İletişim
Standart --->: PHP | Güvenlik Önlemleri

Angel her konuda sen varsın, teşekkür etmek zorundamıyım her başlık altında sana :) teşekkürler.
briselies isimli üyemiz çevrimdışıdır. (Offline)   Alıntı ile Cevapla
Alt 01-16-2008   #3
AnG€L
Normal Üye
 
AnG€L - ait Kullanıcı Resmi (Avatar)

Türkiyenin En Kaliteli Bilgi Paylasim Mekani AKdenizForum..
Kullanıcı Bilgileri
 
Üyelik Tarihi: Jun 2007
Nerden: İZMİR
Mesajlar: 2.194
Üye No: 14268
Extra Bilgiler
Tecrübe Puanı: 31
Rep Gücü : 188
Rep Derecesi : AnG€L has a spectacular aura aboutAnG€L has a spectacular aura about
İletişim
Standart --->: PHP | Güvenlik Önlemleri

teşekkür ederim çok sizlere faydalı olabılıyorsam ne mutlu bana :))
AnG€L isimli üyemiz çevrimdışıdır. (Offline)   Alıntı ile Cevapla
Alt 01-16-2008   #4
briselies
Amatör Üye
 
briselies - ait Kullanıcı Resmi (Avatar)

Türkiyenin En Kaliteli Bilgi Paylasim Mekani AKdenizForum..
Kullanıcı Bilgileri
 
Üyelik Tarihi: Jan 2008
Mesajlar: 29
Üye No: 57213
Extra Bilgiler
Tecrübe Puanı: 17
Rep Gücü : 50
Rep Derecesi : briselies is on a distinguished road
İletişim
Standart --->: PHP | Güvenlik Önlemleri

seninle gurur duyuyoruz dermişim :) daha yeni üyeyim tanımıyorum seni bile ama :) yalandan kimse ölmez, seninlegurur duyuyoruz :)) senin yüzünden sıfırdan başlıcam bu işe :)))
briselies isimli üyemiz çevrimdışıdır. (Offline)   Alıntı ile Cevapla
Cevapla

Seçenekler

Yetkileriniz
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-KodlarıKapalı
Gitmek istediğiniz klasörü seçiniz


Saat: 10:01 PM


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Akdeniz forum Web Sitesi Bir Forum sitesi oldugun'dan öterin kullanicilar görüs almadan konularini aninda sitede yayinlayabilmektedir
bu yazılardan dolayı doğabilecek her türlü sorumluluk yazan kullanıcılara aittir,
yine de sitemizde yasalara aykırı unsurlar bulursanız iletişim Yoluyla email adresine bildirebilirsiniz..


Diyet Uzmanı Sesli Chat oyun oyun hileleri oyun adtech ile reklam 2.0 seo yarışması Büyükçöplük.Com fx15
Sitemap
5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 450, 18, 19, 20, 21, 22, 23, 24, 25, 287, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 426, 38, 39, 40, 41, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 75, 258, 82, 83, 86, 87, 88, 89, 342, 260, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 117, 112, 111, 270, 120, 121, 122, 123, 124, 125, 126, 127, 128, 134, 130, 131, 316, 133, 221, 137, 142, 268, 138, 454, 145, 141, 139, 140, 163, 146, 172, 173, 147, 144, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 319, 194, 171, 170, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 195, 196, 197, 318, 198, 199, 220, 205, 206, 207, 208, 211, 212, 213, 214, 215, 216, 217, 218, 222, 226, 228, 230, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 243, 244, 250, 251, 252, 257, 254, 253, 255, 259, 261, 269, 271, 503, 272, 273, 274, 275, 277, 283, 279, 280, 281, 282, 284, 285, 286, 288, 289, 290, 291, 295, 296, 304, 305, 308, 309, 310, 311, 312, 313, 314, 320, 321, 322, 323, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 415, 336, 337, 338, 340, 341, 343, 344, 345, 346, 347, 348, 349, 350, 351, 385, 396, 355, 356, 358, 360, 361, 362, 363, 364, 365, 367, 368, 369, 370, 371, 372, 374, 375, 376, 378, 379, 381, 382, 383, 384, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 397, 398, 399, 400, 401, 402, 403, 404, 405, 407, 408, 409, 410, 411, 412, 413, 414, 416, 417, 418, 419, 421, 422, 423, 424, 425, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 455, 456, 457, 458, 459, 460, 461, 462, 508, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 504, 505, 506, 507, 528, 529, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542,