Web geliştirme veya Node.js yolculuğunuza yeni başlıyorsanız, uygulamanızın güvenliğini sağlamanın ne kadar önemli olduğunun farkında olmayabilirsiniz.
Express.js, arka uç web uygulamaları oluşturmak için yüksek performanslı bir çözüm sunar, ancak güvenlik açısından yetersizdir. Bir web uygulaması oluştururken, kullanıcılarınızın verilerini korumak için yeterli güvenlik önlemlerine ihtiyacınız vardır.
Neyse ki, Express.js uygulamalarınızın güvenliğini artırmak için kullanabileceğiniz yöntemler vardır. Bu ipuçlarının tümü, farklı yaklaşımlar kullanarak uygulamalarınızın güvenliğini artırmanıza yardımcı olacaktır.
Bir Express.js Uygulaması Kurun
Bir demo ayarlayarak başlayın Express.js web sunucusu kullanarak npm, Düğüm Paket Yöneticisi. Yerel olarak bir proje klasörü oluşturun ve dizini terminalinizde buna değiştirin.
mkdir ekspres proje
cd ekspres proje
Ardından, bir paket.json kök dizindeki dosya.
npm başlatma -y
Devam edin ve Express.js'yi yükleyin.
npm ekspres kur
Son olarak, bir sunucu.js Dosyayı proje klasörünüzün kök dizinine yerleştirin ve temel bir web sunucusu kurmak için aşağıdaki kodu ekleyin.
sabit ifade = gerekmek("ifade etmek")
sabit uygulama = ekspres()
sabit PORT = işlem.env. LİMAN || 5000uygulama.get("/", (gerekli, res) => {
res.json("Selam Dünya!")
})
app.listen (BAĞLANTI NOKTASI, () => {
konsol.kayıt(`Sunucu başlatılıyor http://localhost:${PORT}`)
})
Sunucuyu şu komutla başlatın:
düğüm sunucusu.js
Artık Express.js uygulamanızın güvenliğini sağlamak için kullanabileceğiniz bazı önlemleri keşfetmeye hazırsınız.
1. Kask Kullanarak Express.js Uygulamalarının Güvenliğini Sağlama
Kask çeşitli HTTP güvenlik başlıklarını ayarlayarak sunucu tarafı uygulamalarının güvenliğini sağlamaya yardımcı olan bir Node.js ara yazılımıdır. Bu başlıklar, karşı temel savunma mekanizmalarını sağlar. yaygın arka uç güvenlik açıklarısiteler arası komut dosyası çalıştırma (XSS), siteler arası istek sahteciliği (CSRF) ve daha pek çok şey gibi.
Express.js, HTTP güvenlik başlıklarını varsayılan olarak yapılandırmaz ve potansiyel olarak hassas başlıkları açığa çıkaran potansiyel bir güvenlik kusuru bırakır. Kötü niyetli aktörler bu bilgileri kullanarak yetkisiz erişim elde edebilir veya başka bir şekilde uygulamanızı bozabilir.
Kask, hayati bir kalkan görevi görerek uygulamanın HTTP yanıtlarının gerekli güvenlik önlemlerini almasını sağlayarak potansiyel saldırı yüzeyini önemli ölçüde azaltır.
Kask Olmadan Express.js Uygulamalarının Güvenliğini Keşfetme
Sunucu çalışırken uygulamanın başlıklarını inceleyin. Devam et ve Postman kullanarak API'ye HTTP istekleri yapın veya yanıt başlıklarını gösteren başka bir istemci. Çoğu tarayıcı, bunu yapmanıza izin verecek bir dizi geliştirici aracı içerir.
Home uç noktasına istek gönderdiğinizde, benzer sonuçları Başlıklar Postman içindeki yanıtın bölümü.
Dikkat edin X-Powered-By başlık. Tipik olarak, arka uç teknolojileri, web uygulamasına güç veren çerçeveyi veya diğer yazılımları belirtmek için bu başlığı kullanır. genellikle kaldırmanız gerekir X-Powered-By Bir üretim ortamında başlık.
Bunu yaparak, potansiyel saldırganların teknoloji yığınınızla ilişkili bilinen güvenlik açıklarından yararlanmak için kullanabilecekleri değerli bilgiler elde etmelerini engellemiş olursunuz.
Express.js Sunucusunun Güvenlik Yapılandırmasını Test Edin
Uygulamalarınızın güvenlik durumunu değerlendirmek için Güvenlik Başlıkları çevrimiçi araç. Bu uygulama, istemci tarafı ve sunucu tarafı uygulamaları için HTTP başlıklarının güvenlik yapılandırmasını değerlendirmek için özel olarak tasarlanmıştır.
Öncelikle, yerel Express.js sunucunuzu İnternet üzerinden erişilebilir hale getirmeniz gerekir. Bunu başarmak için iki olası yaklaşım vardır: Express.js uygulamanızı bir bulut sunucusuna dağıtmak veya ngrok kullanmak.
kullanmak için ngrok'u indir zip dosyasını açın, yürütülebilir dosyayı çıkarın ve uygulamayı başlatın. Ardından, yerel Express.js sunucunuzu ngrok ile barındırmak için aşağıdaki komutu çalıştırın.
ngrok http 5000
ngrok, şuna benzeyen bazı kısa bilgiler verecektir:
sağlananı kopyala yönlendirme URL'si ve içine yapıştırın Güvenlik Başlıkları' giriş kutusuna tıklayın ve tarama düğme.
Güvenlik değerlendirmesi tamamlandığında, benzer bir rapor almalısınız.
Rapora göre, Express.js sunucusunun zayıf bir F seviye. Bu düşük derece, sunucunun yapılandırmasında temel HTTP güvenlik başlıklarının bulunmamasının bir sonucudur; bunların olmaması, sunucuyu potansiyel güvenlik risklerine karşı savunmasız bırakır.
Kaskı Express.js Uygulamasına Entegre Edin
Şimdi devam edin ve Helmet'i Express.js uygulamanıza entegre edin. Bağımlılığı yüklemek için aşağıdaki komutu çalıştırın.
npm kask takma
server.js dosyanızı güncelleyin ve Helmet'i içe aktarın.
sabit kask = gerekmek("kask")
Şimdi, Express.js uygulamanıza Kaskı ekleyin.
app.use (kask())
Son olarak, geliştirme sunucusunu döndürün, yönlendirme bağlantısını şuradan kopyalayın: ngrok'lar terminal ve içine yapıştırın Güvenlik Başlığı yerel sunucuyu yeniden taramak için giriş alanı. Yeniden tarama tamamlandığında, şunlara benzer sonuçlar görmelisiniz:
Helmet'i entegre ettikten sonra Express.js, HTTP yanıtında birkaç temel güvenlik başlığı içerir. Bu önemli gelişme, Express.js uygulamasının bir A seviye.
Kask kusursuz bir çözüm olmasa da, Express.js uygulamanızın genel güvenliğini önemli ölçüde artırır.
2. Bir Girdi Doğrulama Kitaplığı olan Joi'yi Kullanarak Express.js Uygulamalarının Güvenliğini Sağlama
Joi kullanıcı girişini doğrulamak ve sterilize etmek için uygun bir yol sağlayarak Express.js uygulamalarının güvenliğini sağlamaya yardımcı olan bir giriş doğrulama kitaplığıdır. Joi kullanarak doğrulama şemaları tanımlayarak, gelen veriler için beklenen yapıyı, veri türlerini ve kısıtlamaları belirleyebilirsiniz.
Joi, girdiyi tanımlanan şemaya göre doğrular ve belirtilen ölçütleri karşıladığından emin olur. Bu, veri enjeksiyonu, siteler arası komut dosyası çalıştırma (XSS) ve diğer veri işleme saldırıları gibi yaygın güvenlik açıklarını önlemeye yardımcı olur.
Joi'yi uygulamanıza entegre etmek için aşağıdaki adımları izleyin.
- Joi'yi kurun.
npm yükleme joi
- Joi'yi server.js dosyanıza aktarın.
sabit Joi = gerekmek('joi');
- Girdi verileri için beklenen yapıyı ve kısıtlamaları tanımlayan bir Joi veri doğrulama şeması oluşturun.
sabit şema = Joi.object({
e-posta: Joi.string().email().required(),
şifre: Joi.string().min(5).maks(16).gerekli()
}); - Tanımlanan şemayı kullanarak gelen tüm verileri doğrulayın.
sabit { hata, değer } = schema.validate (req.body);
eğer (hata) {
// Doğrulama hatası işle
// Örneğin, bir hata yanıtı döndürün
geri dönmek res.status(400).json({ hata: hata detayları[0].İleti });
}
Bu adımları uygulayarak, Express.js uygulamalarınızın güvenliğini sağlamak için Joi'nin giriş doğrulama yeteneklerinden yararlanabilirsiniz. Bu, gelen verilerin tanımlanmış kısıtlamaları karşılamasını sağlayarak olası veri manipülasyonu güvenlik tehditlerini önler.
3. CORS Mekanizmasını Kullanarak Express.js Uygulamalarının Güvenliğini Sağlama
Kaynaklar Arası Kaynak Paylaşımı (CORS), web sunucularının hangi kaynakların (istemciler veya diğer sunucu tarafı uygulamalar) korunan kaynaklarına erişebileceğini yönetmek için kullandığı bir mekanizmadır. Bu mekanizma, siteler arası komut dosyası çalıştırma (XSS) saldırıları gibi sorunları önleyerek yetkisiz kaynaklar arası isteklere karşı korunmaya yardımcı olur.
CORS kullanarak Express.js uygulamalarının güvenliğini sağlamak için şu adımları izleyin:
- CORS paketini yükleyin.
npm kurulum kabloları
- server.js dosyasında CORS ara yazılımını zorunlu kılın ve kullanın.
sabit korlar = gerekmek('kors');
app.use (kors());
CORS ara yazılımını Express.js uygulamanıza entegre ederek Kaynaklar Arası Kaynak Paylaşımını etkinleştirirsiniz. Bu, kaynaklar arası isteklerle ilgili olası güvenlik risklerini azaltmanızı sağlar.
Sunucu Tarafı Uygulamalarını Kolaylıkla Güvenli Hale Getirme
Express.js uygulamalarınızın güvenliğini artırmak için bu temel önlemlerden birini veya birkaçını kullanabilirsiniz.
Sunucu tarafı uygulamalarınızı korumak için birçok önlem ve yaklaşım mevcut olsa da, temel çıkarım, tüm geliştirme yaşam döngüsü boyunca güvenliğe öncelik vermeniz gerektiğidir. Bu, tasarım aşamasında başlayan ve konuşlandırmaya kadar devam etmesi gereken bir görevdir.