Etiket arşivi: web programlama

XSS Nedir?

Cross Site Scripting kelimelerinin kısaltmasıyla oluşan ve önlem alınmadığında korkulu rüya olabilecek bir tehlike. Çapraz siteler arasında script çalıştırma, kullanıcı bilgilerini ele geçirme gibi bir çok riske sebep olan bir yöntem. Hackerlarınsa en sevdiği yöntemlerden bir tanesi. Peki işin temeli nedir, nasıl çalışır önce kısaca ona bakalım.

XSS Nasıl Çalışır?

Gün içerisinde bir çok siteyi ziyaret ediyoruz ve oturumlarımız hep açık. Google, Facebook, Twitter, Borsa Ekranları ve bazen banka ekranlarımız gün boyu ya da günün bazı zamanlarında açık ve online. Bu da demek oluyor ki Sekme açık olmasa bile oturumlarımız aslında açık. Bankaların oturum süre kısıtlaması birazdan mantıklı gelmeye başlayacak. Açık olan bu oturumlarımıza; kötü niyetli bir hacker ya da kullanıcı, ziyaret ettiğimiz farklı bir siteler aracılığıyla erişim sağlayabilir. Dilediği işlemi yapabilir. Örneğin Facebook üzerinden bir sayfayı haberiniz olmadan size beğendirebilir ya da banka hesabınızdan haberiniz olmadan işlem yapabilir. Bu bazen korsan siteler üzerinden olabilirken eğer önlem alınmamışsa çok sık ziyaret edilen bir site üzerinden de yapılabilir. Bugün bilinen ve güvendiğimiz bir çok web sitesi üzerinden kötü niyetli kullanıcıların benzer saldırıları gerçekleşti. Elbette siteler kullanıcılarının güvenliği için her geçen gün daha çok önlem almaya devam ediyor. Bu durum aslında hackerlarla geliştiriciler arasında bitmeyen bir savaşa benziyor.

XSS’e Nasıl Önlem Alınabilir?

Önlem almak için kullanıcıların verilerinin kaydedildiği ve özellikler tüm kullanıcılara sunulduğu noktalarda veriyi süzmek gerekir. Php‘de bunun için htmlspecialchars() fonksiyonu bulunmakta. Bu fonksiyon aracılığıyla html tagları, kullanıcı tarafında çalıştırılamayacak hale getirilir. Ancak bu kesin çözüm değildir. Kötü niyetli kullanıcılar farklı teknikler geliştirerek bu fonksiyonun etrafından dolanmayı başarabilmektedir. jsfuck.com’daki örnek gibi farklı karakterlerle javascript betikleri yazmak mümkün olabiliyor. Elbette güncel tarayıcılar bu tarz açıklar için önlem alıyor ancak her kullanıcı güncel olamayabiliyor. O nedenle template sistemi kullanmak önemli. Bir çok geliştirici tarafından geliştirilen ve topluluk tarafından farklı testlere tabi tutulan sistemlerle daha güvenli kalmam mümkün olabilir. Özellikle Frameworklerin sundukları template sistemleri tercih edilebilir. Laravel Blade vs gibi.

Kapanış

Yazıyı yazarken aklıma tarayıcıların sekme özelliğini sundukları dönemler aklıma geldi. Bu dönemler aslında XSS açıklarının ayyuka çıktığı dönemlerdi. Büyük siteler büyük açıklarla karşı karşıya kalmışlardı ve önlem almaları zor olmuştu. O karanlık dönemler geride kaldı ancak %100 güvenlik diye bir şey yok. Her zaman tetikte olmakta fayda var. Her zaman söylendiği gibi, %100 güvenlik istiyorsanız sunucuyu kapatıp uyuyabilirsiniz 🙂 Yorumlarınızı bekliyorum.

Php Nedir?

Php sunucu taraflı çalışan bir script dilidir. Açılımı Personal Home Page (Kişisel Ana Sayfa)-dır. Rasmus Lerdorf tarafından yaratılmış; Andi Gutmans ve Zeev Suraski tarafından gelişimine büyük katkı sağlanmıştır.Dünya üzerinde en çok kullanılan web programlama dillerinden birisidir.

Üye giriş işlemleri, veri tabanı işlemleri gibi bir çok işlem php yardımıyla yapılmaktadır. Php ile yapabilecekleriniz hayal gücünüzle sınırlı demek yanlış olmaz. Özellikle php’nin artısı olan linux kodlarının da kullanılabilmesi yardımıyla yapılabilecekler gerçekten hayal gücünün sınırlarını zorlamata. Ancak bu noktada şunu söylemek gerekiyor. Kiralanana bir çok paylaşımlı hostinglerde güvenlik gerekcesiyle bir çok fonksiyonun kullanımı kapatılmış olabilir.

Php’yi kullanabilmek için hosting hizmeti alabileceğimiz gibi kendi bilgisayarımıza localhost kurarak da kullanabiliriz. Windows için yaygın olarak wamp server kullanılmakta. Basit ve klasik bir php kodunu görelim ve php ile ilgili biraz daha bilgi verelim.

<?php
echo 'Merhaba Dünya';
?>

Bu kısa kod tüm programlama dillerinde klasik haline gelmiş ve bir dili öğrenirken ilk olarak kullanılan ‘Merhaba Dünya’. Kodu çalıştırdığınızda ekrana Merhaba Dünya yazısının geldiğini göreceksiniz. Kodlama hakkında detaya girmek istemiyorum. İlerleyen zamanlarda Php Dersleri yazmayı düşünüyorum. O kısımda daha detaylı inceleleriz.

Php bir script dili olduğu için, html ve javascript kodlarının içerisine yazmak mümkün. Biraz daha açıklamak gerekirse; php yardımıyla html ve javascript kodlarını çıktı yapmak/üretmek mümkün. Bu da script dilinin en büyük nimeti.

Php öğrenmek isteyenlere bir kaç tavsiye vermek gerekirse; en azından öğrenme sürecinde hazır kodları kullanmamak gerek ve öğrenmeye çalıştığımız yerde gördüğümüz kodları kopyala yapıştır yapmak yerine yazma yolunu seçmeli, az bilsek de bir örnek proje hazırlayarak hayata geçirmek daha doğru olacaktır. Bu süreçteki en önemli nokta ise zorlu bir kısımla karşılaştığımızda ‘burası da böyle olsun’ dememek gerek. Ne kadar çok uğraşırsanız o kadar çok öğreneceksinizdir. Herhangi bir programlama dilini bilmiyorsanız php öğrenmek bir günde olacak şey değildir. Zaten tamamen bilmek çok zor. Php’nin sayısız kütüphanesi ve bir çok framework-ü bulunmakta. Herşeyde olduğu gibi burada da emek vermek gerekiyor.

Web Programlama Nedir

Web programlama kısaca; web üzerinde dinamik sayfalar oluşturmaya yarayan diller topluluğudur. Bu diller; sunucu taraflı olmak üzere başlıca, php, .net ve jsp. Tarayıcı/kullanıcı olmak üzere javascript’tir. Bir çok kişi/otorite bu dillerin programlama dilleri olarak tanımlanmasının yalnış olduğunu söylemektedir. Çünkü bu diller birer script dilleridir. Bu konuyu daha sonra başka bir yazıda derinlemesine işlemeyi planlıyorum.

Sunucu Taraflı Diller
Bu diller adı üzerinde sunucu taraflı çalışan dillerdir. Bu dillerde ağırlıklı olarak, veri tabanıyla ilişkili işlemler yapılmakta. Bu işlemler, üye kaydı, giriş gibi veri girişi ve veri çıkışı gibi işlemlerdir. Veri çıkışı denildiğinde aklınıza sadece bir web sayfası gelmesin. Bu veri çıkışı ihtiyaca göre bir excel dökümanı olabilir, bir pdf dosyası ya da bir xml dosyası olabilir. Aynı şekilde veri girişi de sadece yazı(text) olmak zorunda değil. Bir dosya, resim ya da döküman olabilir. Sunucu taraflı bir dil yardımıyla bir excel dökümanından veri okuyabilirsiniz. Bir resim üzerinde belli düzenlemeler yapabilirsiniz. Web sayfası olarak veri çıkışlarında bir çok kişinin tam olarak kavrayamadığı bir nokta vardır. Sunucu tarafında hazırlayacağınız veri, kullanıcı tarafına ulaştığında sadece html dili ile hazırlanmış bir veri olacaktır. Yani sunucuya yapılan istek sonucunda oluşturulan veri, kullanıcıya ulaştıktan sonra, sunucu tarafında bu dosyaya artık müdahele edemezsiniz. En azından o sayfa için oluşturduğunuz kodlar içerisinde. Sunucu taraflı diller, sadece istek yapıldığında yaşayan yapılardır. Ancak bazı durumlarda bize sürekli canlı olan yapılar gerekebilir. Örneğin bir üyelik formunda anlık doğrulama yaparken. İşte böyle bir durumda karşımıza javascript gibi hayat kurtaran bir dil karşımıza çıkıyor. Son olarak, sunucu taraflı dillerden hangisini tercih etmemiz gerektiğini sorabilirsiniz. Bu tamamen sizin tercihinize kalmış. Bir çok kişi hangisinin daha iyi olduğuyla ilgili uzun tartışmalar girişiyor. Ancak ben onlardan değilim. Sonuç itibariyle, bir dilde yapabildiklerinizi diğer dillerde de yapabiliyorsunuz. Ben şahsen php ile çalışıyorum. Ama dediğim gibi tercih size kalmış.

Kullanıcı Taraflı Diller
Aslında diller demek yalnız olur. Çünkü bu kısımda sadece javascript bulunuyor. Bazılarınız; ajax, jquery var diyebilirsiniz. Ancak atladığınız bir şey var. O da bunların birer javascript kütüphaneleri olduğudur. Bu kodları açarsanız, javascript kodlarından oluştuklarını görebilirsiniz. Şimdi kullanıcı taraflı demek ne anlama geliyor, avantajları nelerdir, dezavantajları nelerdir. Onları konuşalım. Öncelikle javascript kullanmak için bir sunucuya ihtiyaç duymazsınız, çünkü adı üstünde yazdığınız kodlar kullanıcı tarafında çalışır. Javascript sayfa açık kaldığı sürece yaşayan bir yapıdır. Sunucu taraflı dillerde sayfa oluşturulup; kullanıcıya iletildikten sonra bir değişiklik yapılamaz. Ancak bu dil için bu geçerli değildir. Basit bir örnek vermek gerekirse. Sunucu tarafında zaman verisini alıp ekrana bastığınızda bu veri istek zamanın verisi olur ve değişmez. Ancak kullanıcı tarafında o andaki zaman verisini sürekli güncelleyebilirsiniz. Tabi ki bu çok basit bir örnek. Javascript kütüphaneleri yardımıyla yapılabilecek şeyler hayal gücünün sınırlarını zorlamakta. Ancak bu dil ile ilgili sıkıntılı bir durum vardır. Kodlar kullanıcı taraflı çalıştığı için, saatlerce emek vererek yazdığınız kodlar, başkaları tarafından kolaylıkla çalınabilir.

Tasarım Kısmı
Bu kısımda tabiki html ve css bulunmakta. Ancak bunlara birer programlama ya da script demek pek mantıklı değil. Her ne kadar son zamanlarda css için js(javascript)-ten gören çalmaya başladı denilse de, bu kategoriye girmemekteler. İlerleyen zamanlarda bu iki dil ile de ilgili birer makale yazmayı planlıyorum.

Son Söz
Artık günümüzde bilgisayar denildiğinde aklımıza direkt olarak internet gelmekte ve internet üzerinde sayfalar ve çeşitle dökümanlar oluşturmamıza yarayan dilleri öğrenmek, bu sektörün içinde olmak isteyenler için kaçınılmaz olmuş durumda. Umarım bu işe gönül vermiş herkes, belli bir seviyede uzmanlığa ulaşır. Okuduğunuz için teşekkürler.