"keep it secret, keep it safe!"

09/07/06

Bu sözler Yüzüklerin Efendisi üçlemesinin ilk bölümünden. Nostalji yapıyorum da biraz :D
Neyse asıl yazmak istediğim ajax ve güvenlik üzerine birkaç küçük not. Ne alaka demeyin okuyun sonra karar verin;
Dün akşam üstü dolaşırken internetin lüks semtlerinden birinde bir sitede güzel bir oylama sistemi gördüm, yalnız üyeler oy verebiliyormuş, ne güzel güvenliği iyi yapmışlar deyip üye oldum. Hoşuma giden şeyleri inceleyip nasıl çalıştıklarını araştırmayı seviyorum. ama fazla inceleyince kurdu çıkıyor :D
gerçi buradaki programcının hatası ama ajax ile uygulama yapan herkesin düşebileceği hatalardan.
1. Heryerde get metodu kullanmak
2. Sunucu tarafında isteğin gerçekten ajax ile yapılıp yapılmadığını kontrol etmemek.
3. Yapılan işlemlerde yetkilendirme kontrolunun yapılmaması (bu daha çok sunucu tarafını ilgilendiriyor).
get methodu ile çalışmak kolay olduğu için çokça tercih ediliyor ve kodu biraz incelememiz işlemin nasıl olduğu hakkında fikir edinmeniz için yeterli.
Sunucu tarafında isteğin ajax ile olup olmadığını kontrol etmek özellikle get methodu ile çalışıyorsanız güvenlik açısından yararlı olabilir.
Prototype ile çalışanlar için şöyle bir güzellik var; http istek başlığına X-Requested-With: XMLHttpRequest ekliyor. Bu sayede isteğin prototype ile yapıldığını ayırt edebilirsiniz.

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER ['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){ //prototype ile istek yapıldı }
else //prototypesız istek yapıldı.

bu yöntemi SitePoint de javascritsiz istekleri bulmak için kullanmışlar.
Her ne kadar bunlar güvenliği sağlıyor gibi görünse de asıl olay sunucu tarafını ilgilendiriyor. İsteğin sadece ajax ile yapılacağını düşünüp kullanıcı yetkilendirmelerine yeteri kadar önem verilmiyor.
Şimdi alakayı kuralım ajax Web 2.0ın altın yüzüğü, güvenliği elden bırakmadığınız sürece ;)

moo.dom ve Behaviour

07/06/06

“Dur hele bunlar da neyin nesi?” diyenleri duyabiliyor gibiyim zira hiçbir türkçe sitede bahsi geçmemiş olması beni oldukça şaşırttı.
moo.dom ve Behaviour farklı fakat aynı iş için yazılmış 2 farklı javascript kodu. Yaptıkları iş web 2.0 ile ilgilenen herkesin ekmeğine yağ sürecek cinsten. Şöyleki az çok javascript ile ilgilenen herkes bilir ki javascript kodumuzu ya script tagları arasına yazar yada farklı bir .js dosyasına yazıp HTML dosyamıza ekleriz ve yazdığımız kodu tetiklemesi için onclick(); gibi fonksiyonları kullanırız. Kullandığımız bu fonksiyonlar HTML kodu içinde olamak zorundadır javascript kodumuz farklı dosyada olsa bile.
İşte moo.dom ve Behaviour bu fonksiyonları HTML kodundan ayırmamıza olanak sağlıyor. Bunu yaparken de CSS tarzı seçim metodu kullanıyor. (.class #id veya HTML elemanı adı ile). Yani HTML kodunuza hiç javascript karıştırmadan istediğiniz eleman yada elemanlara tetikleyiciler (event listeners) ekleyebilirsiniz. Gerçekten harika.
CSS ve XHTML kodlayanlara gün doğdu diyebilirim çünkü bu scriptleri kullanmak için HTML kodunuzu anlamsal olması gerekiyor. Her istediğiniz elemana rahatça erişebilmelisiniz. Bu da her elemanı iyi tanımlamakla oluyor.
Benim kişisel seçimim moo.dom’dan yana. prototype.js kütüphanesini kullanıyor bu ekstradan 50kb bir yük demek diye düşünebilirsiniz. Fakat zaten prototype’a ihtiyacınız olacağı için (ilerde mutlaka kullanacağınıza eminin) sorun olmayacaktır. Ayrıca lite verisiyonu da mevcut. Kod yapısı olarak behaviour’dan daha basit.
Gerisi bize kalmış :)