Teknoloji projelerinin başarısız olmasının milyonlarca nedeni var. Yanlış hesaplanmış iş modelleri, fazla tahmin edilen talep veya köpüren maliyetler, adını siz koyun. Ancak profesyonel hayatım boyunca, parlak fikirlere ve iyi potansiyele sahip pek çok projenin görünüşte küçük hatalar ve gözden kaçırmalar yüzünden çöktüğünü gördüm. Ve sanırım bu neden en acı olanı, en azından benim için bir geliştirici olarak. Bu makalede deneyimlerimi paylaşmak ve arka uç geliştiricilerin web uygulamalarında çalışırken karşılaştıkları sorunları ve zorlukları analiz etmek istiyorum. Çoğunlukla gözden kaçırılan önemli noktaları vurgulayacağım ve bu engellerin maksimum verimlilikle nasıl aşılacağını açıklayacağım. Bunun riskleri en aza indirmenize ve projenizin başarı şansını önemli ölçüde artırmanıza yardımcı olacağından eminim.
Kulağa ne kadar açık gelse de şu nokta çok önemlidir: asla gizli veya hassas bilgileri kaynak kodunuzda saklamayın. İhlaller mali kayıplara ve diğer ciddi sorunlara yol açabilir. Hiçbir zaman kodda saklanmaması gereken hassas bilgiler şunları içerir:
Bu tür bilgileri proje kodunuzda saklamak yerine ortam değişkenlerini kullanın. Daha güvenli sistemler için aşağıdakiler gibi sağlam gizli depolama çözümleri kullanmayı düşünün:
Hassas bilgilerin uygulama kodunda saklanmasının ciddi bir sorun olmadığını düşünüyorsanız şunu göz önünde bulundurun: Yalnızca 2022'de GitHub şunu tespit etti:
Çözüm: Projenizi hemen kontrol edin
Zaten bir projeniz varsa ve artık kodunuzdaki sırlardan endişeleniyorsanız, içinizi rahatlatabilecek kullanışlı çözümler var. Manuel kontroller zaman alıcı olabilir, bu nedenle otomasyon çok önemlidir. Yararlı araçlar şunları içerir:
Bu araçlar sadece birkaç örnektir; diğer popüler seçenekler arasında
Şaşırtıcı bir şekilde, bu konu nadiren tartışılıyor ve bazı geliştiriciler, üçüncü taraf çözümlerini kullanmanın yasal sorunlara ve şirketleri için önemli sorunlara yol açabileceğinin farkında bile değil. Bana inanmıyor musun? Şu senaryoyu hayal edin: Küçük bir şirketteki bir geliştirici,
Ticari kullanımı açıkça yasaklayan lisanslara sahip kütüphaneleri kullanan projelerde de ciddi sorunlar ortaya çıkabilir. Ve hiç lisans yoksa da durum daha iyi olamaz: Aslında, herhangi bir kod varsayılan olarak telif hakkıyla korunduğundan, bir lisansın olmaması önemli bir sorun teşkil eder. Lisanslar, kullanıcılara belirli koşullar altında kodu kullanma hakkı verir, ancak lisans olmadan, kamuya açık olsa bile kodu kullanmanın hiçbir yasal dayanağı yoktur.
Lisans sorunlarının yargı alanınıza bağlı olarak sizi farklı şekillerde etkileyebileceğini belirtmekte fayda var: bu konu özellikle uluslararası telif hakkı anlaşmaları imzalayan ülkeler için geçerlidir. Örneğin, bu alandaki başlıca uluslararası anlaşmalardan biri olan Edebiyat ve Sanat Eserlerinin Korunmasına İlişkin Bern Sözleşmesi'nin şu anda 180 civarında üye ülkesi bulunmaktadır. Bu nedenle, açık izin olmadan kod kullanmak, telif hakkı yasalarını ihlal etmek anlamına gelir ve dünya çapında birçok yerde yasal savaşlara yol açabilir. Ancak bu, yazılı ve yazılı olmayan tüm kuralları ihlal ederek 'rahat' bir ülkeye gitmeniz gerektiği anlamına gelmez. Birbirimize saygı duyalım ve eğer birisi gelişiminin belirli amaçlar için kullanılmasını istemiyorsa, insani açıdan bakıldığında bile bunu yapmamak en iyisidir.
Çözüm: Otomatik kontrolleri ve güncellemeleri kullanın
Gördüğünüz gibi lisanslama ve telif hakkı sorunları karmaşıktır. Kendinizi ve şirketinizi önceden korumak için kullandığınız kütüphanelerin ve yazılımların lisanslarını kontrol etmeniz en doğrusudur. Kütüphaneler için bu çok zor değil; modern paket yöneticilerinin zaten bunun için araçları var. Örneğin, PHP bestecisinde bunu ` komutuyla yapabilirsiniz.
Bağımlılıkları güncellerken bu komutları çağırmayı unutmayın (bu kontrolleri otomatikleştirmek daha da iyidir), çünkü bağlı bir kitaplığın lisansı yeni sürümlerde değişebilir.
Web geliştirmede, bir projenin geliştirme (dev), kalite güvencesi (QA), aşamalandırma ve üretim gibi birden fazla sürümüne sahip olmak yaygındır. Sık sık, bir sitenin veya web projesinin geliştirme/QA ve hazırlama sürümlerinin İnternet'teki herkesin erişimine açık olduğu senaryolarla karşılaştım. Endişe verici bir şekilde, test sürümleri bazen arama motorları tarafından birincil sürüme göre daha etkili bir şekilde dizine eklenebilir ve bu genellikle ürüne zarar verir.
Buradaki asıl sorun, test sürümlerinin hatalar veya hassas, hatta belki de ödün verici bilgiler içerebilmesidir. Ek olarak, beta sürümleri genellikle son sürüme göre bilgisayar korsanlığına karşı daha savunmasızdır. Bu, bunların kullanılabilirliğinin bir saldırganın hassas verilere, dahili koda ve hatta sunucunun kendisine erişme riskini artırdığı anlamına gelir. API'nin test sürümlerine yetkisiz erişim son derece tehlikeli olabileceğinden, mobil uygulama gibi bir şey için arka uç geliştiriyorsanız bu özellikle doğrudur.
Güvenlik risklerinin ötesinde, yinelenen web sayfaları arama motoru sıralamalarını olumsuz yönde etkileyebilir. Google gibi arama motorları bu kopyaları istenmeyen içerik olarak görebilir ve projenizin orijinal sayfalarının sıralamasını düşürebilir, hatta bunları dizinden tamamen kaldırabilir.
Çözüm: Güvenlik stratejinizi en baştan tasarlayın
Domainlerden tasarruf etmeyin. Çevrimiçi olarak erişilebilen bir test sürümüne ihtiyacınız varsa, buna özel olarak ayrı bir alan adı satın alın. Bu basit ama etkili önlem, saldırganların genellikle önce alt alanları kontrol etmesi nedeniyle güvenlik risklerini azaltır. Test sürümünüzü ana kaynağın herhangi bir alt alanında barındırmak, onu kolay bir hedef haline getirir.
Tüm test sürümlerine erişimi kısıtlayın. Geliştirme, QA, hazırlama ve diğer sürümlerin genel erişime açık olmadığından emin olun. Örneğin, bunları yalnızca bir VPN aracılığıyla erişilebilecek şekilde yapılandırın. Bu, test alanı kötü niyetli aktörler tarafından bilinse bile yetkisiz erişim olasılığını azaltır.
Test sürümlerini dizine eklenmekten koruyun. Test sürümlerinize yalnızca VPN aracılığıyla erişilebiliyor ve ayrı gizli alanlarda barındırılıyor olsa bile, bunları bir "robots.txt" dosyası veya "noindex" meta etiketleri kullanarak arama motoru indekslemesinden koruyun. Arama motorları bazen bu sayfaları beklenmedik şekillerde bulup dizine ekleyebildiğinden bu adım çok önemlidir.
Kritik öneme sahip olmalarına ve zorlu öğrenilen derslerle oluşturulmuş olmalarına rağmen birçok geliştiricinin gözden kaçırma eğiliminde olduğu güvenlik kuralları vardır. Böyle bir kural, projenizin gerçek IP adresini her zaman gizlemektir. Sunucularınızın IP adresi alan adı üzerinden belirlenebiliyorsa, bu durum aşağıdaki gibi birçok soruna yol açabilir:
DDoS Saldırıları: Projenizin gerçek IP adresini bilen saldırganlar, sunucunuza Dağıtılmış Hizmet Reddi (DDoS) saldırısı başlatabilir. Örneğin, bir
Potansiyel Güvenlik Açıklarının Belirlenmesi: Yalnızca amatörler değil, ciddi bilgisayar korsanları da açık bağlantı noktalarını ve ağa açık yazılımları tarayarak zayıf noktaları bulabilir ve bunlardan yararlanabilir. MongoDB gibi iyi bilinen hizmetlerde bile yanlış yapılandırma nedeniyle önemli veri ihlalleri yaşandı. Bu sorunların çoğu, gerçek IP adresinin gizlenmesiyle önlenebilir.
Çözüm: Potansiyel saldırganın hayatını daha karmaşık hale getirin
Sunucunuzun gerçek IP adresini gizleyerek saldırganların sisteminizi hedeflemesini çok daha zorlaştırırsınız. İçerik Dağıtım Ağı (CDN) veya DDoS koruma hizmetlerinin kullanılması burada çok etkili olabilir. Popüler seçenekler şunları içerir:
Bu araçlar güvenliği önemli ölçüde artırabilse de akılda tutulması gereken ek hususlar vardır:
E-posta Başlığı IP Sızıntısı: E-posta göndermek için ana sunucunuzu kullanırsanız, gerçek IP adresi e-posta başlıklarında açığa çıkabilir ve bu da güvenlik çabalarınızın boşa gitmesine neden olabilir.
IP Geçmişi ve Whois İstekleri: Gibi hizmetler
DDoS Koruması ve API Uç Noktaları: API uç noktaları olarak hizmet veren alanlar için DDoS korumasını kullanırken dikkatli olun. Koruma sistemleri, JSON/XML yanıtlarını HTML koduyla değiştirerek istemci tarafı uygulamalarınızın işleyişini bozabilecek kullanıcı doğrulama adımları sunabilir.
Giden API İstekleri: Sunucunuz üçüncü taraf API'lere istek gönderdiğinde, yanlışlıkla IP adresini açığa çıkarabilir. Proxy'yi değiştirmek, saldırının sonuçlarıyla uğraşmaktan daha kolay olduğundan, bu tür istekler için proxy sunucuların kullanılması yardımcı olabilir.
Projenizin gerçek IP adresini saklamanın her derde deva bir önlem olmadığını unutmamak önemlidir. Yazılımınız tarafından kullanılan bağlantı noktalarını harici ağdan kapatmak, mümkün olan her yerde çok önemlidir. Standart bağlantı noktalarını değiştirmek tartışmalı bir uygulamadır; bazı uzmanlar bunun kurulumunuzu önemli bir fayda sağlamadan karmaşıklaştırdığını savunuyor. Çoğu zaman, yazılımın ağ TCP bağlantıları yerine Unix yuvaları aracılığıyla etkileşim kuracak şekilde yapılandırılması tercih edilir (eğer hem projeniz hem de yazılımınız aynı sunucuda çalışıyorsa). Bu yaklaşım etkileşim hızını artırmanın yanı sıra açık bağlantı noktalarına olan ihtiyacı ortadan kaldırarak güvenliği de artırıyor.
Veritabanı yönetim sistemleri (DBMS) veya ayrı sunuculardaki diğer dahili hizmetler için erişimin, kesinlikle kontrol ettiğiniz belirli IP adresleriyle sınırlı olduğundan emin olun. Bu kurulum, kritik sistemlere yetkisiz erişimi önler, ekstra bir güvenlik katmanı ekler ve harici saldırı ve veri sızıntısı risklerini en aza indirir.
Bu tavsiye oldukça basittir ancak yine de sıklıkla gözden kaçırılır: projenizin bağımlılıklarını ve sunucu yazılımını düzenli olarak güncelleyin. Güncelliğini yitirmiş ve savunmasız kod, onu kolayca istismar edebilecek saldırganların hayalidir.
Çözüm: Güncellemelerinizi otomatikleştirin
Her şeyi manuel olarak güncellemenize gerek yok; birçok otomasyon aracı yardımcı olabilir. Örneğin,
Güvenlik sertifikalarının yenilenmesinin otomatikleştirilmesi de çok önemlidir. Eğer kullanırsan
\Aynı prensip sunucu yazılımı için de geçerlidir. Eğer Linux ile, özellikle de Debian/Ubuntu tabanlı dağıtımlarla çalışıyorsanız,
Burada verilen ipuçları, arka uç geliştiricilerinin hatırlaması gerekenlerin yalnızca bir kısmıdır. gibi yaygın konularla karşılaştırıldığında önemli ancak daha az tartışılan konuları vurgulamayı seçtim.
Web uygulaması güvenliğine ilişkin daha derin bir anlayış için aşağıdakileri keşfetmeyi düşünün:
Geliştirici topluluğunun içgörü ve deneyimleri paylaşma konusunda hem bilgili hem de destekleyici olması gerektiğine inanıyorum. Bu nedenle herkesi, backend geliştirme alanında çalışan herkes için değerli olan gözlemlerini ve yorumlarını paylaşmaya davet ediyorum!