Authentication ve Authorization¶
Authentication (kimlik doğrulama) ve authorization (yetkilendirme), modern web uygulamalarının temel güvenlik bileşenleridir. Yanlış uygulamalar güvenlik açıklarına, performans sorunlarına ve kullanıcı deneyimi problemlerine yol açabilir.
1. JWT’nin Yanlış Kullanımı¶
❌ Yanlış Kullanım: JWT’yi saklamak için localStorage
kullanmak.
localStorage.setItem("jwt", token); // Güvenlik açığına neden olabilir
✅ İdeal Kullanım: JWT’yi HttpOnly
cookie olarak saklayarak XSS saldırılarını önleyin.
var cookieOptions = new CookieOptions
{
HttpOnly = true,
Secure = true,
SameSite = SameSiteMode.Strict
};
Response.Cookies.Append("jwt", token, cookieOptions);
2. Hatalı Yetkilendirme Kontrolleri¶
❌ Yanlış Kullanım: Yetkilendirme kontrollerini istemci tarafında gerçekleştirmek.
if (user.role === "admin") {
// Yetkili işlemler
}
✅ İdeal Kullanım: Yetkilendirme kontrollerini sunucu tarafında gerçekleştirin.
[Authorize(Roles = "Admin")]
public IActionResult AdminEndpoint()
{
return Ok("Yalnızca admin kullanıcılar erişebilir.");
}
3. Şifrelerin Yanlış Yönetimi¶
❌ Yanlış Kullanım: Şifreleri düz metin (plaintext) olarak saklamak.
INSERT INTO Users (Username, Password) VALUES ('user1', '123456');
✅ İdeal Kullanım: Şifreleri hash’leyerek güvenli bir şekilde saklayın.
var hashedPassword = BCrypt.Net.BCrypt.HashPassword("123456");
4. Güvenli Olmayan Varsayılan Yapılandırmalar¶
❌ Yanlış Kullanım: HTTPS’i zorunlu kılmamak.
app.UseAuthentication();
✅ İdeal Kullanım: HTTPS kullanımını zorunlu kılın ve güvenli yapılandırmalar uygulayın.
app.UseHttpsRedirection();
app.UseAuthentication();
5. Expired Token Yönetiminin İhmal Edilmesi¶
❌ Yanlış Kullanım: Süresi dolan token’ları kontrol etmemek.
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.ReadJwtToken(jwt);
✅ İdeal Kullanım: Token geçerliliğini doğrulayın ve süresi dolan token’ları yönetin.
var validationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret_key"))
};
tokenHandler.ValidateToken(jwt, validationParameters, out SecurityToken validatedToken);
6. Role-Based Authorization Yanlış Kullanımı¶
❌ Yanlış Kullanım: Rolleri sabit kodlamak.
if (user.Role == "Admin")
{
// Yetkili işlemler
}
✅ İdeal Kullanım: Policy-based authorization uygulayın.
services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
});
[Authorize(Policy = "AdminOnly")]
public IActionResult AdminEndpoint()
{
return Ok("Yalnızca admin kullanıcılar erişebilir.");
}
7. Open Redirect Güvenlik Açıkları¶
❌ Yanlış Kullanım: Redirect URL’lerini doğrulamadan yönlendirmek.
return Redirect(returnUrl); // Güvenlik açığı
✅ İdeal Kullanım: Yönlendirme URL’lerini doğrulayın.
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
return RedirectToAction("Index", "Home");
8. Kullanıcı Oturumlarının Kötü Yönetimi¶
❌ Yanlış Kullanım: Kullanıcı oturumlarını manuel olarak yönetmek.
HttpContext.Session.SetString("User", "user1");
✅ İdeal Kullanım: Identity framework gibi standart oturum yönetimi araçlarını kullanın.
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();