You are on page 1of 20

GÜVENLİ WEB

PROGRAMLAMA

• Özet
• Giriş
İÇİNDEKİLER

• Bilgi Güvenliği Özellikleri İNTERNET


• Gizlilik
• Bütünlük PROGRAMCILIĞI II
• Kullanılabilirlik Dr. Öğr. Üyesi Adem
• Girdi Doğrulama
• Kimlik Doğrulama
TEKEREK
• Yetkilendirme
• Enjeksiyon Saldırıları

• Bu üniteyi çalıştıktan sonra;


• Güvenlik ve yazılım güvenliği
HEDEFLER

kavramlarını öğrenebilecek,
• Güvenliğin temelleri olan
Gizlilik, Bütünlük ve
Kullanılabilirlik kavramlarını
öğrenebilecek,
• Kodlamadan kaynaklı yazılım
zafiyetlerini öğrenebilecek,
• Bilgi sistemlerine karşı olası
tehditleri öğrenebileceksiniz.
ÜNİTE

14
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
Güvenli Web Programlama

Gizlilik

Bilgi Güvenliği
GÜVENLİ WEB PROGRAMLAMA

Bütünlük
Özellikleri

Kullanılabilirlik

Girdi Doğrualam

Kimlik Doğrulama

Doğrulama

Yetkilendirme

Enjeksiyon Saldırıları

Atatürk Üniversitesi Açıköğretim Fakültesi 2


Güvenli Web Programlama

GİRİŞ
Yazılım güvenliği, yazılım güvenlik risklerini belirlemek ve yönetmekle
ilgilidir. Uygun gereksinim mühendisliği, tasarım ve mimari uygulamalarının
uygulandığı varsayılacak olursa, bir yazılımın risklerini tanımlamanın ve
yönetmenin bir sonraki en etkili yolu, geliştirilen kodun tekrarlı olarak analiz
edilmesidir. Yazılım güvenliğini sağlamak için geliştirilme aşamasında güvenli
yazılım geliştirme yöntemleri kullanılarak yazılımların geliştirilmesinin sağlanması
ve yazılım güvenlik zafiyetlerinin en aza indirilmesi gereklidir. Yazılım güvenliği
yazılım geliştirme süreçlerinin her aşamasında göz önünde bulundurulmalıdır.
Keşfedilen bir yazılım güvenlik zafiyeti, sürekli tekrarlanmaya ve görünürde sonu
olmayan ciddi zararlara sebep olmaktadır. Yazılım güvenliği alanında birçok
güvenlik terminolojisi vardır. En temel birkaç terminoloji aşağıda anlatılmıştır.
Tehdit: Bir olayın meydana gelme olasılığıdır, güvenlik zafiyetinin manipüle
edilmesi.
Saldırı: Saldırganlar tarafından gerçek bir tehdit uygulaması.
Güvenlik Açığı: Saldırganın bir saldırı gerçekleştirmek ve sistemin güvenliğini
aşmak için kullanabileceği sistemdeki zafiyetler.
Kimlik Doğrulama: Bir kullanıcının kimliğinin belirlenmesi. Bir insan mı yoksa
bir robot mu olduğunu belirlemek için sisteme erişmeden önce kullanıcı kimliğinin
belirlenmesi gereklidir. Örneğin; Kullanıcı adı ve şifre, Yüz kimliği, Parmak izi.
Yetkilendirme: Belirli bir kullanıcının sistemde hangi işlemleri yapmasına izin
verildiğini belirlemek. Örneğin; Belirli bir kullanıcı bir kayıt oluşturabilir ancak
silemez.
Planlama, analiz, tasarım, geliştirme gibi yazılım geliştirme yaşam döngüsü
Bir güvenlik zafiyetini aşamalarının tamamında güvenli yazılım geliştirme ilkelerine uyulmalıdır. Yazılım
tamamen ortadan geliştirme süreçlerinde güvenlik ilkelerine uyarak daha güvenli yazılım geliştirme,
kaldırmak mümkün ön üretimde test ve dağıtım yapmak, maliyetlerin azaltılması ve uçtan uca
değildir ama güvenlik güvenliğin sağlanması gerçekleştirilebilir. Yazılım hataları, programlarda
önlemleri alınarak
beklenmedik ve tipik olarak istenmeyen davranışlardır. Bir güvenlik zafiyeti, sistem
zafiyetler kullanılarak
yapılacak saldırılar güvenlik prosedürlerinde, tasarımında, uygulanmasında veya dâhili olarak bir
sonucunda oluşabilecek kusur veya zayıflıktır. Uygulanabilecek ve güvenlik ihlali veya güvenlik politikasının
zararların etkisinin ihlali ile sonuçlanabilecek kontroller olarak de tanımlanabilir. Güvenli yazılım
azaltılması amaçlanır geliştirmede kalıcı koruma sağlamak için konumdan bağımsız koruma
gerçekleştirmek gereklidir. Yazılıma erişimin gerçekleştirildiği bütün konumlar için
güvenlik stratejileri aynı olmalıdır. Kurum içinden veya kurum dışından yapılan
erişimler için farklı politika uygulanması zafiyetlere sebep olabilir.
Yazılım geliştirilirken, güvenli yazılım geliştirme yöntemlerinin
kullanılmasının amacı yazılımların güvenlik zafiyetlerinin azaltılmasıdır. Bir
güvenlik zafiyetini tamamen ortadan kaldırmak mümkün değildir ama güvenlik
önlemleri alınarak zafiyetler kullanılarak yapılacak saldırılar sonucunda
oluşabilecek zararların etkisinin azaltılması amaçlanır. Bütün zafiyetlerin tamamen

Atatürk Üniversitesi Açıköğretim Fakültesi 3


Güvenli Web Programlama

ortadan kaldırılmasından ziyade karmaşık bir yazılım parçası genellikle pratik


değildir. Böylece birden fazla yani çok faktörlü savunma katmanı oluşturularak, bir
güvenlik açığını bulmak zordur ama saldırı sonucu oluşacak maliyetin veya zararın
azaltılmasını sağlayabilir. Yazılımlara karşı yapılan saldırılara karşı farklı denetim
türleri vardır. Bu denetim türlerini kara kutu, beyaz kutu ve gri kuru testi olarak
sınıflandırmak mümkündür. Kara kutu testi bilinen tehditlerin denetimi için
kullanılır. Beyaz kutu izin verirken girdilerin denetimini yapmak için kullanılır. Gri
kutu ise kara kutu ve beyaz kutu denetim türlerinin birleşimidir.
Yazılımlardaki bir güvenlik açığının manipüle edilmesi sürecine istismar
denir. Bir saldırgan bir güvenlik zafiyetini kullandığında zarar meydana gelir ve bilgi
sistemi istismar edilmiş olur.

BİLGİ GÜVENLİĞİ ÖZELLİKLERİ


Bilgi güvenliğinin Gizlilik, Bütünlük ve Kullanılabilirlik olmak üzere üç temel
özelliği vardır. Bilginin güvenliğini sağlamak için bu üç temel özelliğin sağlanması
gereklidir. Bunlar herhangi bir bilgi sisteminin güvenliğinin sağlanması için temel
beklentilerdir. Yüksek güvenlik, verilerin ifşa edilmeyeceği anlamına gelir. Verilere
ve yazılım kodlarına uygun olmayan (gizlilik) bir şekilde değiştirilmeyecek veya yok
edilmeyecek (bütünlük) ve her zaman uygun erişim sağlanmasıdır (kullanılabilirlik).

Gizlilik
Verinin yetkisiz taraflara ifşa edilmesine karşı korunması anlamına gelir.
Potansiyel olarak, korunan veriler hakkında herhangi bir ipucu sağlayan küçük bilgi
Bilgi güvenliğini sızıntıları bile bu ilkenin geçerliliğini ortadan kaldırır ve güvenlik zafiyetine sebep
sağlamak için Gizlilik, olur. Gizliliğe yönelik saldırılara örnekler aşağıdaki gibi sıralanabilir.
Bütünlük ve
Kullanılabilirlik  Gizli verilerin izinsiz okunması.
özelliklerinin  Kısıtlanmış veriler üzerinde istatistiksel analiz yapmak.
sağlanması gereklidir.  Yetkisiz iletişim mesajlarını okumak.
 İletişim trafiğinin olup olmadığını algılamak.

Bütünlük
Verinin yetkisiz kişilerce oluşturulmasına, değiştirilmesine veya yok
edilmesine karşı korunması anlamına gelir. Potansiyel olarak, verilerin tahrif
edilmiş olabileceği, makul tehdit bile veri bütünlüğünün istismarı olarak
değerlendirilebilir.
Veri bütünlüğü;
 Yeni veri dosyalarını değiştirme, yok etme veya oluşturulması.
 Hatalara, arızalara, çökmelere veya beklenmeyen davranışlara neden
olacak program kodunu değiştirme.
 Değiştirme, silme, çoğaltma, sıra değişikliği veya fazladan mesajlar
oluşturma.

Atatürk Üniversitesi Açıköğretim Fakültesi 4


Güvenli Web Programlama

Kullanılabilirlik
Yetkili tarafların sisteme ve kaynaklarına gerekli erişebilmelerini sağlama
anlamına gelmektedir. Kullanılabilirliğin sabote eden saldırı türü genellikle Servis
Aksatma (Denial of Service) saldırısı türleridir. Bir sistemin veya verilerinin imhası
sistemin kullanılamaz hale gelmesine sebep olur, sistemin devre dışı bırakılması
olarak kabul edilir.
Kullanılabilirlik;
 İnternete bağlı bir hizmeti, isteklerle boğmak, istemcilere hizmet veremez
hale getirmek.
 Bir sunucuyu çökerterek istemcilere hizmet vermesini engellemek.
 Donanım veya yazılım hizmetleri de dâhil olmak, üzere bir sistemin
tamamının veya bir bölümünün kaldırabileceğinden daha fazla istek ile
kullanılmaz hale getirmek.
Örnek

•Gizlilik, Bütünlük ve Kullanılabilik oldukça popüler olan bir bilgi


güvenliği modelidir. Bir kuruluşun veri güvenliğini sağlamaya yönelik
çabalarına rehberlik eder. Siber güvenlik için de eksiksiz olan üç ilke
gizlilik, bütünlük ve kullanılabilirlik, bir güvenlik altyapısının temel
taşını oluşturur. Aslında bu ilkeleri herhangi bir güvenlik programına
uygulamak idealdir.
Girdi Doğrulama yazılım
güvenliğini sağlamak
için URL ve form
alanları gibi yazılım ara
yüzleri kullanılarak, bilgi
sisteminde iş akışına
yalnızca uygun şekilde
Bireysel Etkinlik

oluşturulmuş verilerin
• Web uygulama güvenliğini sağlamak için yapılması gerekenlerin
girilmesini sağlamak
bilgi güvenliği ilkeleri olan gizlilik, bütünlük ve kullanılabilirlik
için kullanıcılar
açısından yorumlayınız?
tarafından girilen
verilerinin uygunluk
doğrulamasıdır.

GİRDİ DOĞRULAMA
Girdi Doğrulama yazılım güvenliğini sağlamak için URL ve form alanları gibi
yazılım ara yüzleri kullanılarak, kullanıcılar tarafından girdi verilerinin uygunluk
doğrulamasının gerçekleştirilme sürecidir. Bilgi sisteminde iş akışına yalnızca
uygun şekilde oluşturulmuş verilerin girilmesini sağlamak için gerçekleştirilir.
Kesme işareti (') karakteri, 1=1 dizesi veya <script> etiketi gibi karakterleri ve
kalıpları tespit etmek ve yasaklı listesi doğrulamasını kullanmak yaygın bir girdi
doğrulaması yöntemidir, ancak saldırganların bu yasaklı listelerini devre dışı

Atatürk Üniversitesi Açıköğretim Fakültesi 5


Güvenli Web Programlama

bırakmaları çok zor değildir. Kullanıcı tarafından sistemlere girilen verilerin sistemi
manipüle etmek için oluşturulmuş veriler mi yoksa normal veriler mi olup olmadığı
güvenli kod geliştirme yöntemleri kullanılarak yazılım tarafında kontrol edilmelidir.
Tarih, kimlik numarası, sosyal güvenlik numarası, posta kodu, e-posta adresi gibi
yapılandırılmış veriler için yazılımcı, çok güçlü bir girdi doğrulama modeli
tanımlayabilir. Veri alanları veya formlar açılır liste veya radyo düğmeleri gibi sabit
bir seçenek grubundan oluşuyorsa, veri girişinin ilk etapta kullanıcıya sunulan
değerlerden biriyle tam olarak eşleşmesi gerekir. Kullanıcının esnek veri girişi
yapabileceği metin alanlarının ise içerik doğrulama işlemlerinin yapılması
gereklidir. Ancak kullanıcıların form ve yorum alanlarına veya metin alanlarına
kesme işareti (') veya küçüktür işareti (<) veya büyüktür (>) yazmak isteyebilir ve
bu durumun tamamen masum nedenleri olabilir. Ama bunun gibi meta karakterler
saldırganlar tarafında da kullanılabileceği için güvenli yazılım geliştirme yöntemleri
kullanılarak girdi doğrulama süreçleri işletilmelidir. İstemcide gerçekleştirilen
herhangi bir JavaScript giriş doğrulamasının JavaScript'i devre dışı bırakan veya bir
Web Proxy'si kullanan saldırgan tarafından atlatılabilir. İstemcide JavaScript
kullanılarak gerçekleştirilen herhangi bir girdi doğrulamasının sunucu tarafında da
yazılımın geliştirildiği web programlama dili kullanılarak da girdi doğrulama
işlemlerinin gerçekleştirilmesi gereklidir.
Doğrulanan tüm kullanıcı girdileri ve kötü amaçlı verilerin siteler arası betik
yazma (XSS) veya SQL enjeksiyonu saldırılarının yürütülmesini önlemek için HTML
sayfasına döndürüldüğünde kodlanmalıdır. Örneğin, (<script>, &lt;script&gt;)
kodlama türü, kullanıcı tarafından kontrol edilen verilerin eklendiği sayfanın
bağlamına özeldir.
Kodlama hataları, yazılım güvenlik açıklarının tek kaynağı değildir. İş
kuralları ve uygunluk gereksinimlerine dikkat edilmemesi de yazılımlarda güvenlik
açıklıklarına ve zafiyetlerine sebep olabilir. Yazılım ara yüzünden yüklenen dosya
yükleme işlemi gerçekleştirilirken, dosya adının beklenen bir uzantısı veya dosya
türü kullandığından emin olmak için girdi doğrulaması yapılmalıdır. Yüklenen
dosyanın maksimum dosya boyutunun sistemin kabul edeceği dosya boyutundan
büyük olmaması kontrol edilmelidir. Web sitesi ZIP veya RAR gibi sıkıştırılmış
dosyaların yüklenmesini destekliyorsa, dosyayı açmadan önce doğrulama kontrolü
yapılmalıdır.
Web sunucuya yüklenen dosyaları sunucu işletim sisteminde depolamak için
yeni bir dosya adı formatı kullanılmalıdır. Dosya adı veya geçici dosya adı için
kullanıcı tarafından oluşturulan herhangi bir metin kullanmamalıdır. Dosya
sunucuya yüklendiğinde, dosyanın depolama alanında yeniden adlandırılması
önerilir. Örneğin, yüklenen dosya adı test.jpg, rastgele bir dosya adıyla
(AI63454sfyertf.jpg gibi) yeniden adlandırılabilir. Bunu yapmanın amacı, test.jpg,
test.asp veya /../../../test.jpg gibi filtreyi değerlendirmek için doğrudan dosya
erişimi ve belirsiz dosya adından kaynaklanacak riskleri önlemektir. Yüklenen
dosyalar kötü amaçlı içerik (kötü amaçlı yazılımdan koruma, statik kaynak analiz
vb.) için analiz edilmelidir. Dosya yolu istemci tarafından belirlenmemelidir.
Sunucu tarafında dosya yoluna karar verilmelidir. Yükleme özelliği, yalnızca belirli

Atatürk Üniversitesi Açıköğretim Fakültesi 6


Güvenli Web Programlama

dosya türlerine ve uzantılarına izin vermek için bir izin verilenler listesi yaklaşımı
kullanılmalıdır. XML uzantılı dosyalar sistemler arasında veri alış verişlerinde
kullanılan yapılardır. Ancak izin verilenler listesinde olsa bile Flash, Java ve
Silverlight uygulamalarında veri yüklemesine izin veren ve güvenlik zafiyetlerine
sebep olabilecek crossdomain.xml ve clientaccesspolicy.xml dosya türlerine izin
verilmemelidir.
Kimlik doğrulaması olan uygulamalarda yüklenen dosya türlerine izin
verilirse, etki alanları arası veri hırsızlığına ve CSRF saldırılarına sebep olabilir. Bu
nedenle "crossdomain.xml" veya "clientaccesspolicy.xml" adlı dosyaları
yasaklamak gereklidir. Güvenlik için kullanılacak .htaccess ve .htpasswd dosyaları
sunucu yapılandırma seçenekleri sağlar ve buna izin verilmemelidir.
Htaccess dosyaları aspx, asp, css, swf, xhtml, rhtml, shtml, jsp, js, pl, php, cgi. gibi
web ortamında yürütülebilir komut dosyalarına izin verilmemesi önerilir.
E-posta adreslerini doğrulamanın en iyi yolu, bazı temel doğrulamaları
gerçekleştirmek ve ardından adresi posta sunucusuna iletmek ve reddederse
istisnalar göz önünde bulundurulmalıdır. Bu, herhangi bir uygulamanın, posta
sunucusunun kabul ettiği herhangi bir adrese e-posta gönderebileceğinden emin
olabileceği anlamına gelir. İlk doğrulama aşağıdaki örnekteki gibi olabilir.

•E-posta adresi, @ simgesiyle ayrılmış iki bölümden oluşur.


Örnek

•E-posta adresi tehlikeli karakterler içermiyor (geri dönüşler, tek veya


çift tırnaklar veya boş baytlar gibi).
•Tam olarak hangi karakterlerin tehlikeli olduğu, adresin nasıl
kullanılacağına bağlıdır (sayfada yankılanır, veri tabanına eklenir, vb.).
•Etki alanı bölümü yalnızca harf, sayı, kısa çizgi (-) ve nokta (.) içerir.
•E-posta adresi makul bir uzunlukta olmalıdır.
•Yerel kısım (@ işaretinden önce) 63 karakterden fazla olmamalıdır.
•Toplam uzunluk 254 karakterden fazla olmamalıdır.

Anlamsal doğrulama, kullanıcı girdilerinin gerçek bir kişiye ait olup


olmadığının doğrulanması sürecidir. Örneğin e-posta adresinin doğru ve meşru
olup olmadığını belirlemek için kullanıcını sağladığı e-posta adresine doğrulama e-
postası gönderilir ve e-postadaki bir bağlantıyı tıklamasını veya kendisine
gönderilen bir kodu girmesini istemektir. Buna ek olarak aşağıda verilen adımlar
da anlamsal doğrulama için kullanılan yöntemlerdir.
 Uygulama başarıyla e-posta gönderebilir.
 Kullanıcının posta kutusuna erişimi vardır.
 Sahipliği kanıtlamak için kullanıcılara gönderilen bağlantılar, aşağıdaki
özelliklere sahip bir belirteç içermelidir:

Atatürk Üniversitesi Açıköğretim Fakültesi 7


Güvenli Web Programlama

 En az 32 karakter uzunluğunda olmalıdır.


 Güvenli bir rastgelelik kaynağı kullanılarak oluşturulmuştur.
 Tek kullanımlık olmalıdır.
 Zaman sınırlı olmalıdır (örneğin, sekiz saat sonra sona eriyor).
E-posta adresinin sahipliğini doğruladıktan sonra, kullanıcının olağan
mekanizma aracılığıyla uygulamada kimlik doğrulaması yapması istenmelidir.
Web uygulamalarının kötüye kullanımı sadece kötü amaçlı kullanıcılar veya
saldırganlar tarafında gerçekleştirilmemektedir. Web uygulamalarını tehdit eden
önemli araçlardan biri de robot yazılımlar kullanılarak kaba kuvvet saldırılarının
gerçekleştirilmesidir. Kaba kuvvet saldırıları ile masum kullanıcıların şifreleri
tahmin edilebilmektedir. Yazılımların bir kullanıcının gerçek kişi olduğunu anlaması
için CAPTCHA modülleri kullanılmaktadır. CAPTCHA, kötü amaçlı kullanıcıların web
uygulamalarını kötüye kullanım amaçlı faaliyetlerde bulunmasını önlemek, kaba
kuvvet saldırılarını engellemek ve gerçek kullanıcıların kimlik doğrulamasını
yapmak için kullanılır. Böylece Web uygulamalarında robot benzeri araçlar
kullanılarak otomatize edilmiş taleplerin oluşturulması engellenebilir.

•CAPTCHA web uygulamalarında özellikle kaba kuvvet saldırılarının


engellenmesi için kullanılan girdi doğrulama aracıdır. Web
Örnek

uygulamalarında farklı türde CAPTCHA kullanımları vardır. Bunlardan


bazılarının kullanım örnekleri aşağıda verilmiştir.
•Metin CAPTCHA : Rastgele ve karmaşık olarak verilen bir metnin
kullanıcı tarafından metin kutusuna doğru girilmesini isteyen
yöntemdir.
•Resim CAPTCHA : Verilen çoklu görüntülerde, ortak olanların seçimini
isteyen yöntemdir. Ör. Bisiklet resimlerinin seçimi gibi.
•Matematiksel CAPTCHA : Toplama ve Çıkarma mantığına dayalı,
kullanıcını verilen matematik işleminin cevabını metin kutusuna
yazmasını isteyen yöntemdir.

KİMLİK DOĞRULAMA
Kimlik doğrulama, bir kişinin, varlığın veya uygulamanın iddia ettiği kişi
olduğunu doğrulama sürecidir. Web uygulamaları bağlamında kimlik doğrulama,
genellikle bir kullanıcı adı veya kimlik ve yalnızca belirli bir kullanıcının bilmesi
gereken bir veya daha fazla özel bilgi öğesi gönderilerek gerçekleştirilir. Oturum
Yönetimi, bir sunucunun kendisiyle etkileşime giren bir varlığın durumunu
koruduğu bir süreçtir. Bu, bir sunucunun bir işlem boyunca sonraki isteklere nasıl
tepki vereceğini hatırlaması için gereklidir. Oturumlar, istekleri iletirken ve alırken
istemci ve sunucu arasında ileri ve geri iletilebilen bir oturum tanımlayıcısı
tarafından sunucuda tutulur. Oturumlar, kullanıcı başına benzersizdir ve
hesaplama açısından tahmin edilmesi çok zordur.
Kullanıcı isimleri ile ilgili olarak şunlara dikkat edilmelidir:

Atatürk Üniversitesi Açıköğretim Fakültesi 8


Güvenli Web Programlama

 Kullanıcı adları veya kullanıcı kimlikleri büyük veya küçük harfe duyarlı
olmamalıdır. Örneğin 'admin' ve 'Admin' aynı kullanıcı olmalıdır.
 Kullanıcı adları benzersiz olmalıdır.
 Yüksek güvenlikli uygulamalar için, kullanıcı tanımlı genel veriler yerine
gizli kullanıcı adları atanabilir.
 Kimlik doğrulama sürecinde kullanıcı adı olarak E-posta adresi
kullanılabilir.
Kimlik Doğrulama işlemlerinde; uygulama kullanıcı arayüzünde, ara katmanı
ve veri tabanı katmanı dâhil olmak üzere oturum açmaya izin verilmemelidir.
Güvenli olmayan erişim (örn. genel erişim/DMZ) için dahili olarak kullanılan kimlik
doğrulama çözümünü (örn. IDP / AD) kullanılmamalıdır.
Kimlik doğrulama için parola kullanırken önemli bir endişe parolanın güçlü
olmasıdır. Güçlü bir parola politikası, bir kişinin parolayı manuel veya otomatik
yollarla tahmin etmesini zorlaştırır ve hatta imkânsız hale getirir. Güçlü bir parola
politikası için şifrelerin minimum uzunluğu uygulama tarafından zorunlu
kılınmalıdır. 8 karakterden kısa şifreler zayıf olarak kabul edilir. Kullanıcıların şifre
oluşturmasını engelleyeceğinden, maksimum şifre uzunluğu çok düşük
ayarlanmamalıdır. Belirli karma algoritmalardaki sınırlamalar nedeniyle ortak bir
maksimum uzunluk 64 karakterdir. Uzun parola Hizmet Reddi saldırılarını önlemek
için bir maksimum parola uzunluğu belirlemek önemlidir. Parolalarda Unicode ve
boşluk dahil tüm karakterlerin kullanımına izin verilmelidir. İzin verilen karakter
türlerini sınırlayan parola oluşturma kuralları olmamalıdır. Bir parola sızdığında
veya güvenlik ihlali tanımlaması sırasında kimlik bilgilerinin döndürülmesi
önlenmelidir.
Kullanıcıların karmaşık bir parola oluşturmasına ve yaygın ve önceden ihlal
edilmiş parolaları engellemesine yardımcı olmak için parola gücü ölçeri
kullanılmalıdır.
Bir uygulamanın, kullanıcının parolasını unutması durumunda hesabına
erişmesi için bir araç sağlayan mekanizmaya sahip olması yaygın bir durumdur. Bu
özellikle ilgili ayrıntılar için Şifremi Unuttum özelliği kullanılabilir.
Bir uygulamanın doğru şifreleme tekniğini kullanarak parola oluşturması çok
önemlidir.
PWNED Passwords,
parolaların daha önce Kullanıcılarca oluşturulan parolalar programlama dillerinde bulunan
ihlal edilmiş parolalara password_verify() işlevi gibi, dil veya frameworkler tarafından sağlanan güvenli bir
karşı kontrol edilebildiği parola doğrulama işlevi kullanılarak parola karması ile oluşturulmalıdır. Parola
bir hizmettir. PWNED
değişikliğini yapan kullanıcının gerçek kullanıcı olduğundan emin olmak
API kullanılarak
parolaların daha önce için, kötüye kullanım durumu, gerçek bir kullanıcı oturum açmak için ortak
ihlal edilip edilmediği bilgisayarı kullanılır. Kullanıcı oturum kapatmayı unutabilirler. Başka bir kullanıcı
tespit edilebilir. aynı bilgisayarı kullanarak, şifre doğrulanma işlemini gerçekleştirmeden, şifreyi
değiştirebilir.
Bazı uygulamalar, bir kullanıcının hassas işlemler gerçekleştirip
gerçekleştiremeyeceğini kontrol etmek için ikinci faktör kimlik doğrulama

Atatürk Üniversitesi Açıköğretim Fakültesi 9


Güvenli Web Programlama

kullanmalıdır. İki yönlü kimlik doğrulaması olarak da bilinen TLS (Transport Layer
Security) İstemci Kimlik Doğrulaması, işlemi sırasında ilgili TLS sertifikalarını
gönderen tarayıcı ve sunucudan oluşur. Sertifikayı kullanarak ve bir Sertifika
Yetkilisine (CA) sertifikanın geçerli olup olmadığını sorarak bir sunucunun
gerçekliği doğrulanabilir, sunucu da istemciden bir sertifika alarak ve üçüncü taraf
bir sertifikaya karşı doğrulayarak kullanıcının kimliğini doğrulayabilir. Bunu
yapmak için sunucu, kullanıcıya özellikle kendisi için oluşturulmuş bir sertifika
sağlar, böylece sertifikanın hangi kullanıcıyı doğrulaması gerektiğini belirlemek için
kullanılır.
Kimlik doğrulama işlevi durumunda yanlış uygulanan hata mesajları,
kullanıcı kimliği ve parola numaralandırma amacıyla kullanılabilir. Bir uygulama,
kimlik doğrulama mekanizmalarından herhangi birini (oturum açma, parola
Daha çok sistem sıfırlama veya parola kurtarma) kullanarak, aşağıdakilerden bağımsız olarak genel
yönetiminde kullanılan bir hata mesajıyla yanıt verir:
En Az Yetki ilkesi,  Kullanıcı kimliği veya parolası yanlış hatası.
kullanıcılara yalnızca
 Böyle bir hesap yok.
işlerini tamamlamak
için gereken minimum  Hesap kilitli veya devre dışı.
yetki atama ilkesini Amaç, bir saldırganın uygulamaya karşı bir kullanıcı numaralandırma eylemi
ifade eder.
başlatmasına izin vererek bir tutarsızlık faktörünün oluşturulmasını önlemektir.

YETKİLENDİRME
Yetkilendirme, bir eylem veya hizmet için onaylanmış doğrulama süreci
olarak tanımlanabilir. Yetkilendirme, bir varlığın kimliğini doğrulama süreci olan
kimlik doğrulamadan farklıdır. Kimliği doğrulanmış bir kullanıcının bütün
kaynaklara erişme ve eylem gerçekleştirme yetkisi yoktur. Örneğin, bir web
uygulamasının normal kullanıcıları ve yöneticileri olabilir ve yöneticiler, normal
kullanıcının sahip olmadığı eylemleri gerçekleştirebilir ancak yöneticilerin
gerçekleştirdiği eylemleri gerçekleştiremez. Ayrıca, kaynaklara erişim için kimlik
doğrulama her zaman gerekli değildir; kimliği doğrulanmamış bir kullanıcı, bir
resim veya oturum açma sayfası gibi belirli genel kaynaklara veya hatta bir web
uygulamasının tamamına erişme yetkisine sahip olabilir.
Yetkilendirme mantığıyla ilgili zafiyetler, web uygulamaları için önemli bir
bilgi güvenliği sorunudur. Yetkilendirme problemlerinin kullanılmasından
kaynaklanan etki, hem biçim hem de önem açısından oldukça değişkendir.
Saldırganlar, korunması gereken kaynaklara erişebilirler, içerik oluşturabilir,
içerikleri değiştirebilir veya silebilir. Böylece bilgi güvenliği kriterlerinden gizlilik,
bütünlük ve kullanılabilirlik ilkeleri ihlal edilmiş olur. Ancak, bu tür eylemlerin
gerçek etkisi, tehlikeye atılan kaynakların kritikliği ve hassasiyeti ile
bağlantılıdır. Bu nedenle, başarıyla yararlanılan bir yetkilendirme kusurunun
işletme maliyeti çok yüksek olabilir.
Hem kimliği doğrulanmamış ziyaretçiler hem de kimliği doğrulanmış (ancak
zorunlu olarak yetkilendirilmemiş) kullanıcılar, yetkilendirme zayıflıklarından

Atatürk Üniversitesi Açıköğretim Fakültesi 10


Güvenli Web Programlama

yararlanabilir. Kötü niyetli olmayan varlıkların hataları veya dikkatsizliği,


yetkilendirme atlamalarını mümkün kılabilse de erişim kontrolü tehditlerinin tam
olarak gerçekleştirilmesi için genellikle kötü niyetli olmaları gerekir. Yatay ayrıcalık
yükselmesi (yani başka bir kullanıcının kaynaklarına erişebilmek), kimliği
doğrulanmış bir kullanıcının yararlanabileceği özellikle yaygın bir
zayıflıktır. Yetkilendirme denetimiyle ilgili hatalar, hem içeriden hem de dışarıdan
kötü niyetli kişilerin her türden hassas kaynakları (veri tabanı kayıtları, statik
dosyalar vb.) görüntülemesine, değiştirmesine veya silmesine veya yeni bir hesap
oluşturma veya maliyetli bir hesap başlatma gibi eylemler gerçekleştirmesine izin
verebilir ama bu işlemlerin gerçekleştirilmesine izin verilmemelidir. Ayrıca, erişim
kontrolü ile ilgili günlük kaydı düzgün kurulmazsa, bu tür yetki ihlalleri tespit
edilemeyebilir veya en azından belirli bir kişi veya gruba atfedilemez.
En Az Yetki güvenlik kavramı, kullanıcılara yalnızca işlerini tamamlamak için
gereken minimum yetki atama ilkesini ifade eder. Daha çok sistem yönetiminde
uygulansa da bu ilke yazılım geliştiriciyi de ilgilendirmektedir. En Az Yetki hem
yatay hem de dikey olarak uygulanmalıdır. Örneğin, bir organizasyonun
hiyerarşisinde hem muhasebeci hem de satış temsilcisi yetki olarak aynı seviyede
yer alsa da her ikisi de işlerini gerçekleştirmek için farklı kaynaklara erişmeleri
gerekir. Muhasebeciye bir müşteri verisine erişim izni verilmemelidir ve satış
temsilcisi bordro verilerine erişememelidir. Benzer şekilde, satış birimi başkanının
astlarından daha fazla ayrıcalıklı yetkiye erişime ihtiyacı olması muhtemeldir.
Bir uygulamada en düşük yetkileri uygulanmaması, hassas kaynakların
gizliliğini tehlikeye atabilir. Yetki stratejileri öncelikle yazılım mimari ve tasarım
aşamasında uygulanır.
Yazılım tasarım aşamasında, güven sınırlarını tanımlanmalıdır. Sisteme
erişecek kullanıcı türlerini, açığa çıkan kaynakları ve bu kaynaklar üzerinde
gerçekleştirilebilecek işlemler (okuma, yazma, güncelleme vb.) belirlenmelidir. Her
kullanıcı türü ve kaynağı kombinasyonu için varsa, kullanıcının rol veya diğer
niteliklere dayalı olarak ve bu kaynaklar üzerinde hangi işlemleri gerçekleştirmesi
gerektiğini belirlenmelidir. Örneğin, bir satış temsilcisinin mesai saatleri içinde
dahili ağdan bir müşteri veri tabanına erişmesi gerekebilir. Ancak mesai saati
dışından veya ev gibi başka konumdan erişmesine izin verilmemelidir.
Bu ve benzeri ihlalleri önlemek için şunlara dikkat edilmelidir;
 Tasarım aşamasında eşlenen izinlerin doğru bir şekilde uygulandığını
doğrulayan testler yapılmalı.
 Sistemdeki izinler ve yetkiler için düzenli aralıklarla kontrol edilmeli; yani,
mevcut ortamdaki kullanıcıların yetkilerinin tasarım aşamasında
tanımlananları aşmamasını sağlanmalı.
 Ek izinler tanımlanmalı. Kullanıcıların daha önceden sahip olduğu yetkileri
almaktansa ek izinler vermek daha kolaydır.
Uygulamanın hem ilk geliştirme sırasında hem de uygulama tarafından yeni
işlevler veya kaynaklar ortaya çıktığında "varsayılan olarak reddet" anlayışı
benimsenmelidir. Erişimin varsayılan konum olduğunu varsaymak yerine, belirli bir

Atatürk Üniversitesi Açıköğretim Fakültesi 11


Güvenli Web Programlama

kullanıcıya veya gruba belirli bir iznin neden verildiğini açıkça


gerekçelendirebilmelidir. Bazı çerçeve veya kütüphaneler varsayılan olarak reddet
stratejisini benimseyebilse de çerçeve veya kütüphane varsayılanlarına güvenmek
yerine açık yapılandırma tercih edilmelidir.
Yazılım geliştiriciler, uygulamalarına minimum çabayla sağlam, karmaşık
mantığı dâhil etmelerine olanak tanıyan çok sayıda kütüphaneye, platforma ve
çerçeveye erişebilir. Ancak, bu çerçeveler ve kütüphaneler, tüm geliştirme
sorunları için çözüm olarak görülmemelidir. Uygun erişim kontrolü ile ilgili olarak
çerçeve ve kütüphane seçimi ile ilgili iki genel endişe, geliştirici tarafında yanlış
yapılandırma eksikliği ve bileşenlerin kendi içindeki güvenlik açıklarıdır.
Güvenli bir şekilde geliştirilmiş bir yazılımda bile, üçüncü taraf bileşenlerdeki
güvenlik açıkları, bir saldırganın normal yetkilendirme denetimlerini atlamasına izin
verebilir. Bu tür endişelerin kanıtlanmamış veya bakımı kötü olan projelerle
sınırlandırılması gerekmez. En sağlam ve popüler kütüphaneleri ve çerçeveleri bile
etkiler. Hem karmaşık, hem de güvenli bir yazılım geliştirme zordur. Yüksek
güvenlikli kütüphaneler ve çerçeveler üzerinde çalışan en yetkin geliştiriciler bile
hata yapabilirler. Bir uygulamaya dâhil edilen herhangi bir üçüncü taraf
bileşeninin bir yetkilendirme güvenlik açığına maruz kalabileceği
değerlendirilmelidir.
Bununla birlikte, uygulamalarda statik kaynakların güvenliği genellikle göz
ardı edilir. Veri tabanlarının ve benzer kritik veri depolarının güvenliği daha önemli
olsa da statik kaynakların da uygun şekilde güvenliklerinin sağlanması
gerekir. Statik kaynakları güvenliğini sağlamak için aşağıdaki nitelikler göz önünde
bulundurulmalıdır. Statik kaynaklar erişim denetimi ilkelerine dâhil edilmelidir.
Statik kaynakları depolamak için kullanılan tüm bulut tabanlı hizmetlerin,
tedarikçi tarafından sağlanan yapılandırma seçenekleri ve araçları kullanılarak
güvence altına alınmalıdır. Diğer uygulama kaynaklarını ve işlevlerini güvence
altına almak için kullanılan erişim denetimi mantığını ve mekanizmalarını
kullanarak statik kaynakların da kritik alt yapılar gibi güvenliği sağlanmalıdır.
Yukarıda bahsedilen önemleler genellikle istemci taraflı erişim
kontrolleridir. Ancak sadece istemci taraflı erişim kontrollerine
güvenilmemelidir. Bir kaynağa erişim verilmesinde veya reddedilmesinde sadece
istemci taraflı kontrol belirleyici olmamalıdır. Tek başına yapılan istemci taraflı
kontrolün atlanması genellikle kolaydır. Erişim kontrolleri, sunucu tarafında, ağ
geçidinde veya sunucusuz işlev kullanılarak gerçekleştirilmelidir.
Erişim kontrolleri ile birlikte diğer önemli husus Günlük kayıtlarıdır
(loglama). Günlük kayıtları, uygulama güvenliğindeki en önemli kontrollerden
biridir. Yetersiz günlük kaydı ve izleme, en kritik güvenlik riskleri arasında kabul
edilmektedir. Uygun günlük kayıtları yalnızca kötü amaçlı etkinliği tespit etmekle
kalmaz, aynı zamanda olay sonrası incelemelerde başvurulan önemli kaynaklardır.
Erişim denetimi ve diğer güvenlikle ilgili sorunları gidermek için ve güvenlik
denetiminde kullanılır. İlk tasarım ve gereksinimler aşamasında gözden kaçırılması
kolay olsa da, günlük kaydı bütünsel uygulama güvenliğinin önemli bir bileşenidir.

Atatürk Üniversitesi Açıköğretim Fakültesi 12


Güvenli Web Programlama

Güvenli web programlama gerçekleştirmek için günlük kayıtlarının içeriği


kadar, web uygulamalarının birim ve entegrasyon testleri de önemlidir. Birim ve
entegrasyon testleri, bir uygulamanın beklendiği gibi ve değişiklikler arasında
tutarlı bir şekilde çalıştığını doğrulamak için gereklidir. Erişim denetimi
mantığındaki kusurlar, özellikle gereksinimler karmaşık olduğunda, göze
çarpmayabilir. Ancak erişim denetimindeki küçük bir mantıksal veya yapılandırma
hatası ciddi sonuçlara yol açabilir. Özel bir güvenlik testi veya sızma testinin yerine
geçmese de erişim kontrolü mantığının otomatikleştirilmiş birim ve entegrasyon
testi, güvenlik açıklarının sayısını azaltmaya üretime geçirmek yardımcı olabilir.
Sızma testleri, uygulamalarda bulunan güvenlik açıklarından yararlanır ve güvenlik
açığı değerlendirmesi yaparak, güvenlik açıklarını tespit eder.
Bireysel Etkinlik

• Web uygulamalarının daha güvenli olması için girdi doğrulama,


kimlik doğrulama ve yetkilendirme özelliklerinde sırayla hangi
işlemlerin yapılması gerekliğini yazınız.

ENJEKSİYON SALDIRILARI
Bir sistemin hangi arayüz kullanımı ve hangi bölümünün saldırıya uğradığına
bağlı olarak birkaç enjeksiyon saldırı türü olabilir. Ancak, bütün enjeksiyon
saldırıları ortak bir model takip ederler. Komutları metin biçiminde kabul eden
programın bazı bileşenleri bir komut kabuğu, SQL yorumlayıcısı, XML ayrıştırıcısı ve
hatta Python veya JavaScript gibi bir dilin yorumlayıcıları olabilir.
Güvenli yazılım geliştirme yöntemleri kullanılmadan geliştirilen
yazılımlardaki zafiyetler, enjeksiyon saldırılarına sebep olabilir. Bu tür zafiyetler,
yazılımın karıştırmak ve istemediği komutların yürütülmesine izin vermek için
kullanıcı girdisine dayanır. Tipik olarak, bu tür karışıklıklar, meta karakterlerin
(noktalama) uygun olmayan şekilde kullanılmasına veya uygunsuz alıntılardan
kaynaklanır.
Aşağıda Şekil 1’de, kullanıcı girdisinin birkaç farklı senaryoda nasıl
kullanılabileceğine dair basit örnekler verilmiştir. Kullanıcı girdisinin yazılıma
ulaşabileceği yerler saldırı yüzeyi olarak adlandırılır. Yazılımda kullanıcı girdisinin
programın davranışını etkileyebileceği yerlere saldırı yüzeyi denir. Kullanıcı
girdilerinin veri tabanı sunucusunda SQL enjeksiyonuna, işletim sisteminde komut
mesajına ve network seviyesinde ise bir network paketinde manipülasyonlara
sebep olabileceği gösterilmiştir.

Atatürk Üniversitesi Açıköğretim Fakültesi 13


Güvenli Web Programlama

Veritabanı Sunucusu
Kullanıcı girdileri
Select * form T where u=$input
Web Form
User : universite
Komut Kabuk (Command Shell)
% mail $input < message
Network Paket
xxxxx universite xxxxx Yorumlayıcı (Interpretter)
Prog = begin + input + end eval prog

Şekil 14.1. Kullanıcı Girdi Senaryosu


Her durumda, kullanıcıdan gelen girdinin, farklı türde bir komut
yorumlayıcısına bir komut dizisi oluşturmak için kullanıldığı unutulmamalıdır.
Yazılımda, kullanıcı girişi gibi verilerden bir dizi sentezlendiğinde ve bu dizi daha
sonra bir komut olarak ayrıştırılıp yorumlandığında, enjeksiyon saldırılarına sebep
olabilecek yapılar aşağıdaki gibi sıralanmıştır.
SQL ifadeleri,
 Komut kabuğundaki gibi komut satırı ifadeleri,
 JavaScript, Python, Perl veya Ruby gibi yorumlanmış dillerde kod
yerleştirme,
 Ağdan iletilen XML verilerine depolanan işleme sırasında XML
enjeksiyonları,
 HTML'de siteler arası komut dosyası oluşturma,
Enjeksiyon saldırılarının gerçekleştirilmesini sağlayan yazılım güvenlik
zafiyetleri, güvenilmeyen veriler söz konusu olduğunda, komutların
oluşturulmasında kullanıcı verilerinin işlenmesini içerir. Pratikte bu, saldırganların
bir web sayfası formu veya bir URL parametresi aracılığıyla istedikleri dizeleri
girebilecekleri bir saldırı yüzeyinden veri kabul etmek ve bundan sonra daha
ayrıcalıklı sunucu kodunun veri tabanına karşı yürüttüğü bir SQL sorgusu
oluşturmak anlamına gelir.
En yaygın enjeksiyon hatası, alıntı karakterlerini rastgele bir dizeden önce ve
sonra koymanın mutlaka tek bir alıntılanmış dize oluşturduğuna inanmaktır.
Alternatif olarak, beklenmeyen meta karakterler, kullanıcı tarafından sağlanan
verilerin amaçlanan kullanımından çıkmasına ve bir komutun parçası olmasına izin
verebilir. Web uygulamaları SQL Enjeksiyonu, Hizmet Reddi, XML Enjeksiyonu ve
XSS Enjeksiyonu gibi saldırılar ile manipüle edilebilmektedir. Programcı
enjeksiyonu öngördüğünde ve kullanıcı dizesini gömülü alıntılar gibi zor işlemler
için kontrol ettiğinde bile, saldırıları etkisiz hale getirmek için tasarlanan kod tüm
olası kötü niyetli biçimleri öngörmediği sürece, bazı belirsiz saldırıların enjeksiyonu
gerçekleştirmesine sebep olur.

Atatürk Üniversitesi Açıköğretim Fakültesi 14


Güvenli Web Programlama

•SQL enjeksiyonu, kullanıcı girdilerine göre SQL cümleleri oluşturan


web uygulamalarında, kullanıcı girdilerinin doğrulanmaması veya

Örnek
yetersiz doğrulanmasından kaynaklanan zafiyetler kullanılarak, SQL
cümlelerinin kötüye kullanılmasına sebep olan saldırı türleridir.

sql = "SELECT * FROM kullanici WHERE ad =' " + kullaniciAdi + " ';"

Yukarıdaki SQL sorgusu kullancı adı bilgisine ait tüm verileri, kullanıcı
tablosundan çekecek şekilde yazılmıştır. Kullanıcı adı kısmına
saldırgan tarafından yazılıma zarar verecek ' or '1'='1' -- ifade
yazılabilir. SQL cümlesi aşağıdaki gibi olur.

sql = "SELECT * FROM kullanici WHERE ad =' " + kullaniciAdi ' or '1' =
'1 --';"

kullaniciAdi değişken değeri ne olursa olsun '1'='1' koşulu


sağlanacağı için ve işlemin OR olmasından dolayı sorgu sonucu her
zaman olumlu olacaktır. (--) Yorum satırı karakterlerinden sonra
gelen tüm ifadelerin bir önemi kalmayacaktır.
Bireysel Etkinlik

•Aşağıda örnek bir sunucu kodu verilmiştir. Kodda, SELECT deyimine


(UId) değişkeni eklenmiştir.

UId = getRequestString("UserId");
txtSql = "SELECT * FROM Users WHERE userId = " + UId;

•Kodda bulunan güvenlik açıklarını yorumlayınız.


•SQL enjensiyonu saldırısını engellenmek için kodda hangi
değişikliklerin yapılması gerekmektedir.

Atatürk Üniversitesi Açıköğretim Fakültesi 15


Güvenli Web Programlama

•Yazılım güvenliği çözülmemiş bir sorun olmaya devam etmektedir; iyi


bilinen yazılım güvenlik zafiyetleri bile hala tehdit olmaya devam
etmektedir. Güvenlik terminolojisi önemli anlamlar ifade ederken bu
terimlerin doğru kullanılması önemlidir. Bilgi güvenliğinin temel
özellikleri gizlilik, bütünlük ve kullanılabilirliktir. Saldırganlar,
yazılımlardan yararlanmak için koddaki güvenlik açıklarından
yararlanırlar ve bu güvenlik açıklarını istismar ederler. Bütün yazılım
Özet
sistemleri (ve tüm varlıklar) birçok tehditle karşı karşıyadır. Yazılım
güvenliğinin zafiyetlerinden kaynaklanacak, yetersiz güvenlik yüksek
maliyetlere sebep olabilir. Çünkü bir web uygulamasının saldırıya
uğraması özellikle kurumların mahrem bilgilerinin ifşa edilmesine
sebep olabilir. Saldırı için kullanılan komutlar, güvenilmeyen girdiler
dinamik olarak sentezlendiğinde, enjeksiyon saldırıları her zaman
gerçekleşebilir. Noktalama işaretleri, (',*, <,>, vb) işaretleri ve meta
karakterler tipik olarak saldırı aracı olarak kullanılabilecekleri için girdi
doğrulamak veya potansiyel olarak tehlikeli dize girişlerini güvenli
olanlara dönüştürmek amacıyla geçici kod yazmak hem çok
zahmetlidir hem de tam olarak doğru olma ihtimali düşüktür. SQL
enjeksiyonları, komut enjeksiyonları, kod enjeksiyonları veya XML
enjeksiyonları en yaygın saldırı türlerindendir. Günümüzde yazılımları
en çok istismar eden saldırı türleri arasında SQL enjeksiyon, XSS
enjeksiyonu, XML enjeksiyonu, kaba kuvvet saldırıları bulunmaktadır.
SQL enjeksiyonu veri tabanına sahip yazılımlarda bulunan SQL
cümleleri kullanılarak gerçekleştirilmektedir. Yazılımın veri
tabanındaki verilerin ele geçirilmesi, silinmesi veya değiştirilmesi gibi
işlemlerin gerçekleştirilmesi için yapılır. XSS enjeksiyonu ise javascript
veya ajax gibi betik diller ile kullanıcıların çerez bilgilerinin ele
geçirilmesi ve yazılımlara yetkisiz erişimlerin gerçekleştirilmesine
sebep olur. Kaba kuvvet saldırıları, kullanıcı adı ve şifre girişi için
kullanılan web formlarına karşı yapılır. Web form alanlarında kullanıcı
adı ve şifre bilgilerini tahmin etmek için sürekli deneme yapılır. Eğer
şifreler kolay tahmin edilebilir olursa, kaba kuvvet saldırıları da
başarılı olur. Kaba kuvvet saldırıları robot yazılımlar kullanılarak
gerçekleştirilir. Kaba kuvvet saldırılarını engellemek için CAPTCHA
doğrulama özellikleri kullanılır. Web uygulamalarındaki bir diğer
zafiyet türü ise kabuk (shell) komutlarında, XML'de oluşturulmuş,
özelleştirilmiş komut dosyalarında ortaya çıkabilir.
•Güvenli yazılım geliştirme yöntemleri kullanılarak bu tür saldırılar
engellenebilir. Web yazılımları geliştirilirken dikkat edilmesi gereken
en önemli güvenlik ilkeleri girdi doğrulama, kimlik doğrulama,
yetkilendirme, parola yönetimi ve log yönetimi işlemleridir. Yazılım
geliştirilirken bu ilkelere dikkat edilirse, geliştirilen yazılımlar daha
güvenli olabilir. Web yazılımlarında bulunan zafiyetler yazılım
geliştirme sürecinde, yazılım tasarımından veya yazılım geliştirme
uzmanından kaynaklanabilir. Güvenli yazılım geliştirilirken, yazılım
geliştirme yaşam döngüsü aşamalarının tamamında güvenlik
ilkelerine uyulmalıdır. Yazılım geliştirme uzmanlarının da güvenli
yazılım geliştirme bilgisine sahip olması gereklidir ve bilgi güvenliği
farkındalığına sahip olmalıdırlar. Böylece yazılımlarda istenmeyen
kötücül komutların yürütülmesine izin vermeyen, meta karakterlerin
(noktalama işaretleri) uygun olmayan şekilde kullanılmasını
engelleyen, kullanıcı girdilerinin doğrulanarak işlendiği güvenli
yazılımlar geliştirilir.

Atatürk Üniversitesi Açıköğretim Fakültesi 16


Güvenli Web Programlama

DEĞERLENDİRME SORULARI
1. Yazılım geliştirme süreçlerinde güvenlik ilkelerine uymanın avantajları
arasında aşağıdakilerden sayılamaz?
a) Güvenli yazılım geliştirme ilkelerini benimseyerek güvenlik riskini
azaltmak.
b) Yazılım tasarım aşamasından itibaren güvenlik ilkelerine uyma
c) Geliştirme maliyetlerinin azaltılması.
d) Güvenlik metodolojisi kullanarak tamamlama süresini planlama.
e) Yazılımın müşteriye teslimi aşamasında güvenlik önemlerini almak.

2. Statik kaynak analiz araçları için aşağıdakilerden hangisi doğrudur?


a) Uygun bir yazılım için testçi ve geliştiriciler değil denetçiler de
olmalıdır.
b) Doğrudan erişim ile kaynak kod üzerinde gerçekleştirilir.
c) Beyaz kutu olarak adlandırılır.
d) Yerine kullanılabilirlik için tasarım, mimari ve dağıtım süreçlerinden
oluşur.
e) Kullanıcılara En Az Yetki verilmesi ilkesidir.

3. CAPTCHA kullanımının amacı aşağıdakilerden hangisinde doğru


verilmiştir?
a) Girdilerin robot yazılımlardan geldiğini doğrulamak.
b) Girdilerin robot yazılımlardan değil, gerçek kişi tarafından girildiğini
doğrulamak.
c) Gerçek kişi veya robot tarafından hiçbir veri girilmediği doğrulamak.
d) Girdilerin bir insandan ve bir robottan girildiğinden emin olmak.
e) Girdilerin noktalama işareti veya meta karakter doğrulamasını
yapmak.

4. "Kara kutu" testinin amacı aşağıdaki seçeneklerden hangisinde doğru


verilmiştir?
a) Üretim uygulamalarındaki zafiyetleri belirler.
b) Yararlanma potansiyelini ölçmek için zafiyetleri belirler.
c) Kodlama hataları için kaynak kodunu denetler.
d) Bilinen bütün tehditleri belirler.
e) Kötüye kullanımı ifade eder.

Atatürk Üniversitesi Açıköğretim Fakültesi 17


Güvenli Web Programlama

5. Yazılım güvenliğini en iyi ne zaman değerlendirmek gerekir?


a) Test sırasında.
b) Geliştirme sırasında.
c) Tasarım sırasında.
d) Bakım sırasında.
e) Uygulama geliştirmenin tüm aşamalarında

6. Aşağıdaki seçeneklerin hangisinde beyaz kutu testi ile kara kutu testi
arasındaki fark en doğru şekilde açıklanmıştır?
a) Beyaz kutu testi, bağımsız bir programcı ekibi tarafından
gerçekleştirilir.
b) Kara kutu testi aşağıdan yukarıya yaklaşımı kullanır.
c) Kara kutu testi, iş birimlerini içerir.
d) Beyaz kutu testi, yazılımın dâhili mantıksal yapılarını inceler.
e) Kara kutu testi belli olmayan yöntemlere karşı yapılır.

Tanım: Yazılımlarda kişisel gizliliğin ve özel bilgilerin korunmasına yönelik


araçlar da dâhil olmak üzere, bilgi erişimi ve ifşasına ilişkin kısıtlamaların
oluşturulmasıdır.
7. Yukarıdaki tanım, aşağıdaki seçeneklerin hangisine aittir?
a) Kullanılabilirlik.
b) Bütünlük.
c) Gizlilik.
d) Kimlik Doğrulama.
e) Girdi Doğrulama.

8. Ağ güvenlik zafiyeti değerlendirmesi ile sızma testi arasındaki fark


aşağıdaki seçeneklerin hangisinde doğru verilmiştir?
a) Sızma testi, kaynakları sıralar ve güvenlik açığı değerlendirmesi,
güvenlik açıklarını sıralar.
b) Ağ güvenlik zafiyet değerlendirmesi ve sızma testi aynıdır.
c) Sızma testi, çalışan hizmetleri tanımlar ve güvenlik açığı
değerlendirmeleri, güvenlik açıklarının daha derinlemesine
anlaşılmasını sağlar.
d) Sızma testi, güvenlik açıklarından yararlanır ve güvenlik açığı
değerlendirmesi, güvenlik açıklarını bulur.
e) Sızma testleri yazılım uygulamaları için, ağ güvenlik testi
değerlendirmeleri ise ağ alt yapıları için yapılır.

Atatürk Üniversitesi Açıköğretim Fakültesi 18


Güvenli Web Programlama

9. Aşağıdakilerden hangisi güvenli yazılım geliştirme yöntemlerine dikkat


edilmeden geliştirilen Web uygulamalarını hedef alacak bir saldırı türü
değildir?
a) SQL Enjeksiyonu
b) Kaba Kuvvet Saldırıları
c) XML Enjeksiyonu
d) XSS Enjeksiyonu
e) Hizmet Aksatma (DOS, DDOS)

10. Yönetici kimlik doğrulaması gereksinimleri aşağıdakilerden hangisinde


doğru tanımlanmıştır?
a) Normal kullanıcılar için eşdeğer seviyede olmalıdır
b) Tüm yöneticiler daha güvenilir olduğu için normal kullanıcılardan
daha az doğrulama katmanına sahip olabilirler.
c) Yöneticiler için kimlik doğrulama yapılmasına gerek kalmayabilir.
d) Normal kullanıcılardan daha fazla yetki ile doğrulama yapılmalıdır.
e) Doğrulama işlemlerinde bütün kullanıcılar gibi aynı seviyede
doğrulama yapılmalıdır.

Cevap Anahtarı
1.e, 2.d, 3.b, 4.d, 5.e., 6.d, 7.c, 8.d, 9.d, 10.d

Atatürk Üniversitesi Açıköğretim Fakültesi 19


Güvenli Web Programlama

YARARLANILAN KAYNAKLAR
Eduardo Fernandez-Buglioni (2013), Security Patterns in Practice: Designing
Secure Architectures Using Software Patterns, John Wiley & Sons
Barnat, J., Brim, L., Ročkai, P. (2007). Scalable Multi-core LTL Model-
Checking. Model Checking Software, Vol. 4595, Lecture Notes in
Computer Science
Mark S. Merkow, Lakshmikanth Raghavan (2010), Secure and Resilient
Software Development, Auerbach Publications
Long, F., Mohindra, D., Seacord, R. C., Sutherland, D. F., & Svoboda, D.
(2013). Java coding guidelines: 75 recommendations for reliable and
secure programs. Addison-Wesley
OWASP ASVS 3.0.1, Application Security Verification Standard ASVS
https://www.owasp.org/index.php/Category:OWASP_Application_Se
curity_Verification_Standard_Project, Erişim tarihi: 20121
Jerome H. Saltzer and Michael D. Shroeder, “The Protection of Information
in Computer systems,” Proc. IEEE Vol. 63, Issue 9, September 1975,
pp.
SEI CERT Coding Standards, https://www.securecoding.cert.org/ . Erişim
tarihi: 2021
Secure Coding in C and C++, 2nd edition Pearson Education
Woodcock, J., Larsen, P.G., Bicarregui, J. & Fitzgerald, J., “Formal Methods:
Practice and Experience,” ACM Computing Surveys, Vol. 41, Issue 4,
Ekim 2009, pp.
Farid, D. M., Harbi, N., Bahri, E., Rahman, M. Z., and Rahman, C.M., (2010).
Attacks Classification in Adaptive Intrusion Detection using Decision
Tree, World Academy of Science, Engineering and Technology.

Atatürk Üniversitesi Açıköğretim Fakültesi 20

You might also like

  • Unite10
    Unite10
    Document31 pages
    Unite10
    Muzaffer Barış Yavuz
    No ratings yet
  • Unite12
    Unite12
    Document29 pages
    Unite12
    Muzaffer Barış Yavuz
    No ratings yet
  • Unite11
    Unite11
    Document30 pages
    Unite11
    Muzaffer Barış Yavuz
    No ratings yet
  • Unite13
    Unite13
    Document19 pages
    Unite13
    Muzaffer Barış Yavuz
    No ratings yet