Professional Documents
Culture Documents
Unite14
Unite14
PROGRAMLAMA
• Özet
• Giriş
İÇİNDEKİLER
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ı
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
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.
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
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ışı
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>, <script>)
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
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.
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:
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
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
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.
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
Ö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 --';"
UId = getRequestString("UserId");
txtSql = "SELECT * FROM Users WHERE userId = " + UId;
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.
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.
Cevap Anahtarı
1.e, 2.d, 3.b, 4.d, 5.e., 6.d, 7.c, 8.d, 9.d, 10.d
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.