1. SQL Injection: Güvenli Veri Tabanı Sorguları ile Koruma
Çözüm: SQL Injection’a karşı korumanın en etkili yolu, parametreli sorgular kullanmaktır. Bu sorgular, kullanıcıdan gelen veriyi doğrudan SQL komutuna yerleştirmez, bunun yerine güvenli bir şekilde parametre olarak işler.
string query = "SELECT * FROM Users WHERE Username = @Username AND Password = @Password";
var users = dbContext.Users.FromSqlRaw(query, new SqlParameter("@Username", username), new SqlParameter("@Password", password));
Yukarıdaki kodda olduğu gibi, kullanıcı giriş verilerini doğrudan sorguya eklemek yerine, parametreli sorgu kullanarak güvenliğinizi sağlarsınız.
2. Cross-Site Scripting (XSS) – Kullanıcıdan Gelen Verileri Temizleme
Çözüm: Veri doğrulama ve çift yönlü HTML kodlama bu sorunun önüne geçmenize yardımcı olabilir. ASP.NET Core, kullanıcıdan gelen veriyi güvenli bir şekilde işlemek için birçok yerleşik özellik sunar.
Aşağıda, kullanıcıdan alınan veriyi güvenli bir şekilde işlerken nasıl XSS saldırılarından korunabileceğinizi görebilirsiniz:
string sanitizedInput = HttpUtility.HtmlEncode(userInput);
Bu, HtmlEncode fonksiyonu kullanarak, kötü amaçlı JavaScript kodlarının çalışmasını engellemiş olursunuz.
3. Cross-Site Request Forgery (CSRF) – Token ile Koruma
Çözüm: ASP.NET Core, CSRF’ye karşı koruma sağlamak için anti-forgery token kullanır. Bu token, her form gönderisinde otomatik olarak kontrol edilir ve geçerli olmadığı takdirde istek reddedilir.
Aşağıdaki gibi bir form, CSRF koruma mekanizması ile güvenli hale gelir:
Herhangi bir kullanıcı isteği, bu token olmadan geçerli sayılmaz ve bu da güvenliği sağlar.
4. Güvenli Kimlik Doğrulama ve Yetkilendirme
Çözüm: ASP.NET Core’da JWT (JSON Web Tokens) veya OAuth 2.0 gibi güvenli kimlik doğrulama yöntemlerini kullanarak uygulamanızın güvenliğini artırabilirsiniz.
Örneğin, bir JWT token kullanarak güvenli bir kimlik doğrulama işlemi şöyle yapılır:
var claims = new[] {
new Claim(ClaimTypes.Name, username),
// Diğer claimler...
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecretKey"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "yourdomain.com",
audience: "yourdomain.com",
claims: claims,
expires: DateTime.Now.AddHours(1),
signingCredentials: creds
);
return new JwtSecurityTokenHandler().WriteToken(token);
Bu şekilde, kullanıcılar güvenli bir şekilde kimlik doğrulaması yapabilir ve yalnızca kendilerine atanmış yetkilere sahip oldukları alanlara erişebilirler.
5. HTTPS Zorunluluğu – Verilerin Şifrelenmesi
Çözüm: ASP.NET Core, HSTS (HTTP Strict Transport Security) başlıkları ile HTTPS kullanımını zorunlu hale getirir. Bu özellik, tüm HTTP isteklerini HTTPS’ye yönlendirir ve bağlantılarınızın güvenliğini sağlar.
Aşağıdaki kod parçası ile HSTS’yi etkinleştirebilirsiniz:
// Startup.cs dosyasına eklenmeli
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseHsts();
// Diğer konfigürasyonlar...
}