Principle of Least Exposure (En Az Maruz Kalma İlkesi)
Günümüzün dijital dünyasında, güvenli uygulamaları geliştirmek her zamankinden daha önemli hale gelmiştir; bu nedenle, Principle of Least Exposure (Türkçesiyle: En Az Maruz Kalma İlkesi) gibi güvenlik ilkelerini anlamak ve uygulamak, yazılım geliştiriciler için hayati öneme sahiptir.
Bu yazıda, En Az Maruz Kalma İlkesi‘nin temel prensiplerini, bunları nasıl uygulayacağımızı ve bu ilkenin uygulamalarımızın güvenliğini nasıl geliştireceğini keşfedeceğiz.
Principle of Least Exposure (POLE)
En az maruz kalma ilkesi temel olarak, bir yazılım veya uygulamanın içindeki bileşenlerin veya modüllerin, yalnızca gerçekten gerekli olan bilgilere ve işlevlere erişebilmesi gerektiğini belirten bir güvenlik ilkesidir. Zaten bu haliyle de yazılımın daha güvenli, sürdürülebilir ve modüler olmasına katkıda bulunur.
En az maruz kalma ilkesi’nin sınırları, genel olarak aşağıdaki maddeler ışığında belirlenir:
- ⭐ Kapsam sınırlaması: Fonksiyonlar, sınıflar ve modüller arasındaki bağımlılıkları ve etkileşimleri sınırlamak, sistemin karmaşıklığını azaltır ve hataların ve güvenlik açıklarının ortaya çıkma olasılığını düşürür.
- ⭐ Gizlilik ve güvenlik: Bileşenlerin sadece ihtiyaç duydukları bilgilere erişebilmesi, hassas verilerin veya işlevlerin yanlışlıkla veya kötü amaçlı olarak ifşa edilme riskini azaltır.
- ⭐ Bakım ve genişletilebilirlik: Modüler ve sınırlı erişime sahip bileşenler, uygulamanın bakımını ve genişletilmesini kolaylaştırır. Sistemde yapılan değişikliklerin etkisi sınırlı olduğundan sisteme yeni özelliklerin eklenmesini daha basit hale getirir.
Aşağıda JavaScript örneğindegüvenlik açığı olan bir kod örneği ve Principle of Least Exposure (POLE) kullanılarak düzeltilmiş hali verilmiştir:
//En Az Maruz Kalma İlkesi
// Kötü pratiği temsil eden global bir değişken
let secretPassword = "SuperSecret123";
function checkPassword(inputPassword) {
if (inputPassword === secretPassword) {
return true;
} else {
return false;
}
}
function userLogin() {
let userPassword = prompt("Lütfen parolanızı girin:");
if (checkPassword(userPassword)) {
console.log("Giriş başarılı.");
} else {
console.log("Hatalı parola.");
}
}
userLogin();
Yukarıdaki örneğimizde, secretPassword
global bir değişken olarak tanımlandığından tüm kodda erişilebilir hale gelmiştir. Böylesi bir yazım anlayışı, kötü niyetli bir kullanıcının veya başka bir kod parçasının bu değeri manipüle etmesine veya okumasına yol açabilir. Aynı kodu aşağıdaki gibi yazarak daha güvenli bir hale getirebiliriz:
//En Az Maruz Kalma İlkesi
function createLoginHandler() {
// secretPassword'ü sadece bu fonksiyon içinde kullanılabilir hale getiriyoruz
const secretPassword = "SuperSecret123";
function checkPassword(inputPassword) {
if (inputPassword === secretPassword) {
return true;
} else {
return false;
}
}
return function userLogin() {
let userPassword = prompt("Lütfen parolanızı girin:");
if (checkPassword(userPassword)) {
console.log("Giriş başarılı.");
} else {
console.log("Hatalı parola.");
}
};
}
// Şimdi 'createLoginHandler' fonksiyonunu çağırarak bir login fonksiyonu oluşturuyoruz
const userLogin = createLoginHandler();
userLogin();
Yukarıdaki örneğimizin düzeltilmiş halinde, createLoginHandler
adlı yeni bir fonksiyon oluşturduk. Yazdığımız bu fonksiyon, secretPassword
değişkenini ve checkPassword
fonksiyonunu içerdiğinden yalnızca içinde tanımlandığı bu kapsamda erişilebilir hale getirir. Sonuç olarak, secretPassword
değişkenine dışarıdan erişim engellenmiş olur ve bu da kodumuzun güvenliğini artırır.
En Az Maruz Kalma İlkesi, yazılım geliştirme sürecinde önemli bir rol oynar ve uygulamaların güvenliği ve kalitesi üzerinde olumlu bir etkiye sahiptir. Bu ilkenin uygulanması, uygulamaların daha güvenli ve sürdürülebilir hale gelmesine yardımcı olur.