Kategori arşivi: Web Programlama

İnternet üzerinde dinamik sayfalar oluşturmaya yarayan script ve diller hakkında makaleler ve yazılar.

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.

Sql Injection Nedir?

Konu yazılım güvenliği ve veri güvenliği olduğunda en önemli başlıklardan birisi elbette Sql Injection’dır. Tanımını yapmak gerekirse; sql komutları arasına zararlı eklemeler, düzenlemeler yaparak veritabanına erişmek diyebiliriz. Bu erişim izinli olmayan verilere ulaşmak olabilir. Verileri silmek olabilir. Hatta fantastik boyutlarda sunucuya root erişimi bile olabilir. Bu nedenle sql injection’a karşı önlem almak önemlidir.

Nasıl Yapılıyor?

Php ve Mysql kullandığım için örneklerim onlar üzerinde olacak. Yazılım katmanında, veritabanına sorgu gönderirken aslında bir text oluşturuyoruz. Yani aslında Sql sorgusu oluşturuyoruz. Bu sorgunun içerisine eklediğimiz değişkenlerle de dinamik hale getiriyoruz. Örneğin bir kullanıcının verilerini almak ya da kullanıcının verilerini güncellemek gibi. Sorgu içerisinde kullanılan değişkenler kötü niyetli kişiler tarafından manipüle edilmeye çalışılıyor. Çok Basit bir sorgu ile göstereyim. Senaryomuzda login esnasında yaptığımız sorguyu baz alalım ve kullanıcıdan gelen veriler üzerinde her hangi bir kontrol yapmayalım.

Nasıl Önlem Alınabilir?

Öncelikle kullanıcı tarafından gelen verileri filtreden geçirmek önemli. Sadece sql injection için değil XSS için de filtreleme yapmak önemli. Bunun için htmlspecialchars fonksiyonu kullanılabilir. Ancak veritabanı güvenliği için kullanılacak fonksiyonlar yeterli değil. Geçmişte kullanılan fonksiyonlarda vardı. Ancak bunların güvensiz oldukları ortaya çıktı. O nedenle veritabanı sorgularını yaparken Php Pdo ya da Orm kullanmak çok önemli. Bunları kullanırken de doğasına uygun kullanmak önemli. Pdo kullanırken değişkenleri sorgunun içerisine doğrudan yazmak risk oluşturacaktır.

Alınabilecek yazılım önlemleri dışında kullanılan versiyonları güncel tutmak da çok önemli. Php, Mysql, Postgresql, Apache, Nginx vb bir çok yazılımdan kaynaklanan güvenlik sorunları olabilir. Kullanılan yazılımların son sürümlerini takip etmek ve güncel kalmak da önlem alma noktasında çok önemlidir.

Toparlarsak

Çok önemli olan sql injection ve veritabanı güvenliği hakkında kısaca bilgi vermek istedim. Eksik olduğunu düşündüğünüz ya da ekleme yapmak istediğiniz konular olursa yorum yapmaktan geri durmayın. Okuduğunuz ve paylaştığınız için teşekkürler 🙂

Bootstrap Nedir?

Bootstrap; Twitter tarafından geliştirilen ve geliştiricilerin kullanımına sunulmuş, ücretsiz bir tasarım kütüphanesidir. Web tasarım dünyasına belli bir standart getirmeyi başarmıştır. Hazır satılan bir çok template bootsrap alt yapısını kullanır. Bu sayede üzerinde değişiklik yapma imkanı daha çok olur. Yani aldığınız template’in sınırları içinde kalmış olmazsınız.

Bootstrap; tasarım tarafında pek bilgisi olmayan, sunucu taraflı geliştiriciler için de adeta bir nimet. Zira bootstrap, sayfa kalıpları, form elementleri, tablo yapıları, menüler, modal box, slider gibi birçok yapıyı ve daha fazlasını bünyesinde barındırır. Bu durumda bir satır css yazmadan gayet güzel sayfalan oluşturmak mümkün oluyor.

Twitter Bootstrap’ı bu adresten indirebilirsiniz. Gerekli dosyaları aşağıdaki örnekte olduğu gibi çağırdıktan sonra kullanmaya başlayabilirsiniz.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
<script src="http://code.jquery.com/jquery.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
</head>

<body>
</body>
</html>

Bootstrap ile ilgili dökümanlara bu adresten ulaşabilirsiniz.

Ftp Nedir?

Ftp; File Transfer Protocol (dosya transfer protokolü) kelimelerinin baş harflerinin birleşiminden oluşur. Sunucu üzerine dosya aktarmaya ve dosya almaya yarar. Hazırlanan web sayfaları, html, php, js, css, resim gibi dosyalar sunucuya ftp aracılığıyla yüklenir. 20 numaralı portu kullanır. Güvenlik duvarlarında ftp’ye erişim engellenirken bu port kapatılır.

En çok tercih edilen ftp programları filezilla ve cuteftp-dir. Filezilla açık kaynak ve ücretsizken, cuteftp ücretlidir. Filezilla’yı bu adresten indirebilirsiniz : https://filezilla-project.org/

Ftp’ye bağlandığında farklı klasörler göreceksiniz. Yayınlamak istediğiniz dosyaları; linux sunucularda public_html klasörüne, windows sunucularda ise www klasörüne yüklemeniz gerekir. Bu dizin altına farklı klasörler oluşturarak, belli bir hiyerarşi kurabilirsiniz.