Let's Talk

Learning Center

Node.js'nin en iyi uygulamaları

Yalın ve duyarlı bir kullanıcı arayüzü oluşturmanın yanı sıra, güvenli bir uygulamaya sahip olmak çok önemlidir. Saldırganların, erişimlerinin ötesindeki verilere erişmek için uygulamalar aracılığıyla manipüle ettikleri bilinmektedir. Saldırganlar, yönetici gibi davranarak veya yapmamaları gereken kaynakları değiştirerek güvenlik açıklarını manipüle eder.

Saldırganlar, Node.js gibi açık kaynaklı bir çapraz platform üzerine inşa edilmiş API uç noktalarını enjekte ediyor. Kullanıcı uygulamaya ilettiği verileri temizlemediğinde veya filtrelemediğinde bir SQL enjeksiyon saldırısı meydana gelir.

Örneğin, kullanıcıların bir ürünü satın aldıkları ve çevrimiçi ödeme yaptıkları bir e-ticaret uygulamasında. Ödeme işlemi tamamlandığında, kullanıcı ödeme ağ geçidinden son noktaya bir post isteği gönderir. Saldırgan, isteği alan uç noktaları ve uç noktanın beklediği yük türünü görmek için ağ günlüklerini izledikten sonra ucuz bir ürün satın alarak bir API alabilir.

Saldırgan bu bilgi ile önceki bir satın alma işlemini simüle edebilir, ancak bu sefer daha pahalı bir satın alma ile değiştirebilir ve uygun yöntemi kullanarak bir uç nokta bekleyen ödeme durumu uygular ve bunun üzerinden doğru verileri gönderir. Uygulama, saldırganın ödeme yaptığını kabul eder ve saldırganın malları satın aldığını belirten bir fatura oluşturur.

Basit bir süreç felaketten kaçınmaya yardımcı olabilir.

En iyi Node.js güvenlik uygulamaları

Bu, web uygulamaları ve ek modüllerin kurulumu için bir arka uç sunucusu olduğu için en popüler açık platformlardan biridir. Arka kapıdan gelen saldırganlara daha fazla fırsat verdiği için güvenlik noktası önerilmemektedir. Platform ne kadar popüler olursa, saldırganlar o kadar çok güvenlik açığı arayacaklar.

Peki Node.js uygulamalarınızı nasıl koruyacaksınız? En iyi uygulamalardan bazıları şunlardır:

  • Kullanıcı girişinin doğrulanması

Yaygın ve popüler bir saldırı SQL Injection'dır. Saldırgan, kurbanın veritabanında SQL deyimleri yürütebildiğinde ve ön uçlarını temizlemediğinde ortaya çıkar.

Bu, Node.js arka uçsa, kullanıcı tarafından sağlanan verilerden parametreleri alın ve doğrudan SQL ifadesinin bir parçası olarak kullanın. Ön uçtan, id parametresi alınırsa, risk, saldırganın isteği manipüle edebilmesi, onunla SQL komutları gönderebilmesi ve tüm veritabanını silebilmesidir. Bu nedenle, bundan kaçınmak için, parametreyi körü körüne göndermek değil, kullanıcı tarafından sağlanan değerlerden doğrulamak gerekir.

XSS veya Siteler Arası Komut Dosyası Çalıştırma saldırıları için SQL Injection ile aynıdır. Buradaki fark, saldırganın SQL göndermek yerine JavaScript kodunu yürütmesidir. Burada ayrıca saldırıyı önlemek için kullanıcıdan giriş doğrulaması gerekir.

  • Güçlü kimlik doğrulama

Güvenlik açığının en yaygın nedeni, zayıf veya eksik bir kimlik doğrulama mekanizmasıdır. Geliştiriciler, kimlik doğrulamaya sahip olmanın yeterli olduğunu düşünerek hata yaparlar, ancak gerçekte, kimlik doğrulama tutarsız veya zayıfsa, kolayca atlatılabilir. Birkaç kuralın izlenmesi koşuluyla, yerel bir Node.js kimlik doğrulama çözümünüz varsa sorun değil. Birincisi, şifreler oluştururken yerleşik Node.js şifreleme kütüphanesini kullanmamaktır.

Ayrıca, başarısız oturum açma girişimlerinin sayısını sınırlandırmalı ve "geçersiz kimlik bilgileri" gibi özel bir ileti yayınlamalısınız. İkincisi, 2FA kimlik doğrulamasını uygulamak çok önemlidir.

  • Çok fazla hata tespit etmekten kaçının

Hataları işlerken dikkate alınması gereken birkaç nokta. Kullanıcıya hatanın tüm ayrıntılarını söylemeyin. Kullanılan yol veya kitaplık veya sırlar gibi tüm ayrıntıları içerebilir. Bu, saldırganların uygulama çökene kadar sürekli olarak kötü niyetli istekler göndermesini önleyecektir. Nodes.js uygulamanızın kötü niyetli isteklerle dolup taşmasını önlemek için, onu doğrudan internete maruz bırakmamalısınız. Node.js yazı tipinde bir yük dengeleyici, bulut güvenlik duvarı veya ağ geçidi kullanmak, bir saldırgan uygulamaya çarpmadan bir adım önce DOS saldırılarının hızını sınırlamaya yardımcı olur.

  • Otomatik güvenlik açığı taramasını başlatma

Node.js sistemi, kurabileceğiniz çeşitli türlerde birçok modül ve kitaplığa sahiptir. Bir çok projede kullanılabilirler fakat aynı zamanda kodun başkası tarafından yazılması ve %100 güvenli olduğu konusunda bir kesinlik olmaması da güvenlik sorunu oluşturmaktadır. Güvenli olduğundan emin olmak için sık tarama, herhangi bir güvenlik açığı olup olmadığını kontrol etmeye yardımcı olur.

  • Veri sızıntısını önleme

Daha önce de belirtildiği gibi, harici arayüze güvenmemeli ve hangi verileri gönderdiğini kontrol etmemelisiniz. Tüm verileri front-end'e göndermek mümkündür, ancak görünürlüğünü filtrelemek mümkündür, ancak bir saldırganın back-end gizli verileri alması zor olmayacaktır.

Örneğin, bir etkinliğe kaydolmuş kullanıcıların bir listesi varsa ve bu etkinlik için bir kullanıcı listesi almak için bir SQL sorgusu gönderilirse, yalnızca harici arabirimdeki veriler ad ve soyadını gösterir. Sorun, cep telefonu numaraları, e-posta, doğum tarihi gibi diğer veriler tarayıcının geliştirici konsolu aracılığıyla erişilebilir olduğunda ortaya çıkar ve veri ihlaline neden olur.

Bunun olmasını önlemek için, veritabanından yalnızca adı ve soyadını çıkarmanız gerekir. Bu daha fazla çaba gerektiriyor, ama buna değer.

  • Günlüğe kaydetme ve izlemeyi yapılandırma

Günlüğe kaydetmenin ve izlemenin güvenlikle ilgili olmadığını düşünebilirsiniz. Ancak, bu durum böyle değildir, çünkü güvenlik en başından beri gereklidir. Sistemin güvenliğini sağlamak sürekli bir süreçtir. Bu nedenle, metriklerin günlüğe kaydedilmesi ve izlenmesi, bilgisayar korsanlarının sisteme sızdığını ve sistemde fark edilmeden saklandığını keşfetmeye yardımcı olur.Использование линтеров безопасности

Güvenlik açıklarını otomatik olarak tararken, kod yazarken genel güvenlik açıklarını da tanımlayabilirsiniz.

Bir kişi güvenli olmayan kodu her kullandığında, güvenlik görevlileri onu bu konuda bilgilendirecektir.

Node.js root olarak çalıştırmaktan kaçının

Mikro hizmetler ve Docker dünyasında, insanlar Node.js'nin nasıl yürütüldüğünü - bir Docker kapsayıcısını çalıştırdığını ve ana makineden izole edildiğini ve bu nedenle güvenliğin doğru olmadığını - unutmaya eğilimlidir. Docker'ı kullanmak, Node.js'yi root olarak çalıştırabileceğiniz anlamına gelmez. Bu, herhangi bir JavaScript kodunu XSS aracılığıyla çalıştırma yeteneğini birleştirir.

Çözüm

Web uygulamalarının güvenliğini sağlamak çok önemlidir. Bu nedenle, sık sık, sıkı bir programın ve sıkı son teslim tarihlerinin, işi her aşamada doğru bir şekilde yapmamıza izin vermemesi söz konusudur. Bu nedenle, yazılım geliştirme yaşam döngüsünün her aşamasında, tasarımdan üretime kadar güvenlik dikkate alınmalıdır.