Bir programcı veya geliştirici olarak güvenli uygulamalar oluşturmanın önemi göz ardı edilemez.
Yazılım güvenliği, yazılımdaki potansiyel güvenlik açıklarını tespit ederek ve bunları korumak için gerekli önlemleri alarak kötü niyetli saldırıların yönetimini ele alır.
Yazılım hiçbir zaman %100 güvenli olamaz çünkü geliştiriciler bir hatayı göz ardı edebilir, mevcut hataları düzeltirken yeni hatalar ekleyebilir veya güncellemeler aracılığıyla yeni güvenlik açıkları ortaya çıkarabilir.
Ancak tüm yazılım geliştiricilerin güvenli yazılım oluşturduklarından emin olmak için kullanabileceği iki ana yöntem vardır. En başından itibaren güvenli kod yazmak ve kodu etkili bir şekilde test etmekle ilgilidir.

Yazılım güvenliği son derece önemli bir rol oynar
Güvenli kod nasıl yazılır
Güvenli kod yazmanın tek bir amacı vardır; hata yönetimi. Kullanıcının uygulamaya sağlayabileceği her potansiyel değeri önceden tahmin edebilir ve bu değer için programda bir yanıt oluşturabilirseniz, güvenli kod yazıyorsunuz demektir.
Tüm iyi geliştiriciler, geliştirdikleri uygulamalar hakkında hemen hemen her şeyi bildiklerinden, bu düşündüğünüzden çok daha basittir. Bu nedenle, uygulamanızın bir görevi gerçekleştirmek için ihtiyaç duyduğu her değeri (onaylanmış değerler) bilmeli ve var olabilecek diğer değerlerin onaylanmamış değerler olduğunu anlamalısınız.
Güvenli kod yazın
Diyelim ki kullanıcıdan yalnızca iki tamsayı değeri kabul eden ve bunlar üzerinde toplama işlemi yapan bir program oluşturmak istiyorsunuz. İyi bir geliştirici olarak artık uygulamanız hakkında her şeyi biliyorsunuz. Bu programın kabul edeceği tüm değerleri (tamsayı değerler) biliyorsunuz ve bu programın gerçekleştireceği görevi (toplama işlemi) biliyorsunuz.
Java'da program oluşturma örneği
import java.util.Scanner;
public class Main {
//The main function that executes the program and collects the two values
public static void main(String[] args) {
System.out.println("Please enter your two integer values: ");
int value1;
int value2;
Scanner input = new Scanner(System.in);
value1 = input.nextInt();
value2 = input.nextInt();
addition(value1, value2);
input.close();
}
//the function that collects the two values and displays their sum
private static void addition(int value1, int value2) {
int sum;
sum = value1 + value2;
System.out.println("The sum of the two integer values you entered: "+ sum);
}
}
Yukarıdaki kod, gereksinimlere tam olarak uyan bir uygulama oluşturur. Çalıştırıldığında konsolda aşağıdaki satırı üretecektir:
Please enter your two integer values:
Daha sonra uygulama, kullanıcı konsola iki tamsayı değeri girene kadar duraklatılmış halde kalacaktır (yani ilk değeri girin, Enter tuşuna basın ve tekrarlayın).
Kullanıcı konsola 5 ve 4 değerlerini girerse program aşağıdaki çıktıyı üretir:
The sum of the two integer values you entered: 9
Bu harika. Program tam olarak yapması gerekeni yapıyor. Ancak kötü niyetli bir kullanıcı gelip uygulamanıza “g” gibi tam sayı olmayan bir değer girerse sorun yaşanacaktır. Bunun nedeni uygulamada onaylanmayan değerlere karşı koruma sağlayan bir kod bulunmamasıdır.
Bu noktada uygulamanız çökecek ve bilgisayar korsanlarının bundan sonra ne yapacaklarını tam olarak bilmeleri için uygulamanıza potansiyel bir ağ geçidi oluşturacaktır.
Program güvenliği örneği
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
//The main function that executes the program and collects the two values
public static void main(String[] args) {
try {
System.out.println("Please enter your two integer values: ");
int value1;
int value2;
//using the scanner class to read each input from the user,
//and assign it to is respective variable (throws an exception if the values are not integers)
Scanner input = new Scanner(System.in);
value1 = input.nextInt();
value2 = input.nextInt();
//calls the addition function and passes the two values to it
addition(value1, value2);
//closes the input stream after it has come to the end of its use
input.close();
//handle all the errors thrown in the try block
}catch(InputMismatchException e){
System.out.println("Please enter a valid integer value.");
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
//the function that collects the two values and displays their sum
private static void addition(int value1, int value2) {
int sum;
sum = value1 + value2;
System.out.println("The sum of the two integer values you entered: "+ sum);
}
}
Yukarıdaki kod istisna işlemeyi gerçekleştirdiğinden güvenlidir. Bu nedenle, tamsayı olmayan bir değer girerseniz program aşağıdaki kod satırını oluşturacaktır:
Please enter a valid integer value.
İstisna yönetimi nedir?
![Yazılım güvenliği neden tüm programcıların sahip olması gereken bir beceridir? Yazılım güvenliği neden tüm programcıların sahip olması gereken bir beceridir?]()
İstisna işleme
Esas itibarıyla istisna işleme, hata işleme kodunu normal işleme kodundan ayırdığınız hata işlemenin modern versiyonudur. Yukarıdaki örnekte, tüm normal işleme kodları (veya potansiyel olarak istisnaya neden olan kodlar) try bloğundadır ve tüm hata işleme kodları ise catch bloğundadır.
Yukarıdaki örneğe daha yakından bakarsanız iki catch bloğunun olduğunu göreceksiniz. İlki bir OutputMismatchException bağımsız değişkeni alır ; bu, tamsayı olmayan bir değer girilirse oluşturulan istisnanın adıdır. İkincisi, Exception argümanını alır ve bu önemlidir çünkü amacı, geliştiricinin test sırasında bulamadığı koddaki istisnaları bulmaktır.
Kodu kontrol edin
Kodu test etmenin ve yeniden test etmenin gücünü asla küçümsememelisiniz. Pek çok geliştirici (ve uygulama kullanıcısı), yazılım kamuya sunulduktan sonra yeni hatalar buluyor.
Kodunuzun kapsamlı bir şekilde test edilmesi, uygulamanızın akla gelebilecek her durumda ne yapacağını bilmenizi sağlar ve bu da onu veri ihlallerinden korumanıza olanak tanır.
Yukarıdaki örneği düşünün. Tamamlandığında uygulamayı yalnızca tamsayı değerlerle test ederseniz ne olur? Aslında tespit edemediğiniz halde tüm olası hataları başarıyla tespit ettiğinizi düşünerek uygulamadan ayrılabilirsiniz.
Gerçek şu ki, tüm olası hataları tespit edemeyebilirsiniz. Bu nedenle hata işleme, kodunuzu test etmeyle birlikte çalışır. Yukarıdaki programın test edilmesi, belirli bir durumda ortaya çıkacak potansiyel bir hatayı ortaya çıkarır.
Ancak test sırasında ortaya çıkmayan başka bir hata mevcutsa yukarıdaki koddaki ikinci catch bloğu bunu halledecektir.
Veritabanı güvenliği
Uygulamanız bir veritabanına bağlanıyorsa, bu veritabanına erişimi engellemenin en iyi yolu uygulamanın tüm yönleriyle güvenli olmasını sağlamaktır. Ancak uygulamanız yalnızca söz konusu veritabanına bir arayüz sağlamak amacıyla tasarlanmışsa ne olur?
İşte bu noktada işler biraz daha ilginçleşiyor. En temel haliyle veritabanları, kullanıcıların veri eklemesine, almasına, güncellemesine ve silmesine olanak tanır. Veritabanı yönetim sistemi, kullanıcıların doğrudan bir veritabanıyla etkileşime girmesine olanak tanıyan bir uygulamadır.
Çoğu veritabanı hassas veriler içerir, bu nedenle bütünlüğü korumak ve bu verilere erişimi sınırlamak için bir erişim kontrolü gereksinimi vardır.
Giriş kontrolu
Erişim kontrolü, veritabanına erişebilecek kişi türlerini belirleyerek ve sahip oldukları erişim türünü kısıtlayarak veritabanının bütünlüğünü korumayı amaçlar. Bu nedenle iyi bir veri tabanı yönetim sistemi, veri tabanına kimin, ne zaman eriştiğini ve ne yaptığını kayıt altına alabilmelidir.
Ayrıca kayıtlı kullanıcıların, etkileşimde bulunmaya yetkili olmadıkları verilere erişmelerini veya bunları düzenlemelerini de engelleyebilir.