Modul 9 - Lekcija 2
Arhitektura modernog Web-a: Pipeline cijev za obradu HTTP Requests Autentifikacije/Autorizacije i Anti-SQLi baze
⏱️ Trajanje: ~3 časa | 📚 Nivo: Srednji/Napredni | 🎯 Praktični primjeri: 5
Middleware je klasna komponenta čiji tok "probijanju" korisnički HTTP Browser paketi koji idu prema Vašem Kontroleru sa servera.
Oni čine strogo kontrolisani redoslijed tunelskih procedura ("Pipeline" ili cijev). Svaki sloj tog tunela propušta signal dalje - Ili ga vraća i Odbija unazad nazad u Browser Short-Circuit spajajući se direkt na klijenta!
Zahtjev (Request) mora da bude skeniran (Ko si ti? To je Autentifikacija) da bi poslije ikako mogao provjeravati tvoja administratorska prava kroz (Autorizaciju).
Zamjena ovih linija u redoslijedu Program.cs fajla bi blokirala i srušila prijavu
svima na sistem jer bi kontrola pitala "Ko je to?" prije nego uopće stigne identifikacioni
proces validacije!
// Program.cs
app.UseRouting(); // Da Aplikacije prepozna URL mapiranje
// ====== UVIJEK NEPRIKOSNOVENI SIGURNOSNI CEMENT ========== //
// NAKON Routinga ali PRIJE Controller Endpointsa MAP!
app.UseAuthentication(); // 1. CITANJE COOKIJA (Ima li te?)
app.UseAuthorization(); // 2. Dozvolu imas?? Da/Ne
app.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}");
Ukoliko se koristi klasični Web Browser i Cookie metod prijava umjesto JWT Tokenizacija
konfiguracioni dio prije app.Build() treba da izgleda:
// DODAVANJE AUTENTIFKACIJSKOG SERVISA (Iznad Use() Linija)
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Account/Login"; // Ako udari neovlasen vrati ga amo na Ekran
options.AccessDeniedPath = "/Account/AccessDenied"; // Ako je pogresan level prebaci vamo
options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true; // ZASTITA OD KRADJE Javascriptom (XSS kradje Cookija) !!!
options.Cookie.SecurePolicy = CookieSecurePolicy.Always; // Cookie se ne posmatra bez zelenog Katanca(HTTPS)!!
});
EF Core po svojoj generalnoj građi donosi imunizaciju i zastitu vasih baza podataka protiv ozloglasenog Hakerskoj napada sa unosom Komandi na text Inputima poznatim pod nazivom (SQL injection!).
Unese li Haker u search polje "Pojam; DROP TABLE Korisnici;--"
string sql = "SELECT * FROM Ustanova WHERE Ime = " + searchBoxUnos; // DIREKTNO CITA PAD SISTEMA
// EF Core prevodi ovo u parametrized SQL, zlonamjerni tekst ostaje samo "doslovni tekst" bez mogucnosti komadnog unosa.
var employee = db.Employees.FirstOrDefault(e => e.Jmbg == userInput);
Za sisteme poput Javne Uprave, obavezni su Log Tragovi (ko i kada je usao). Nije potrebno to pisati u hiljadu Action Kontrolerskih metoda nego Odsjecite samo jedan sloj "Custom Middleware" ispred svega, nakon Authentication modula!
app.UseAuthentication();
app.UseAuthorization();
// --- CUSTOM AUDIT MIDDLEWARE ZA JAVNU UPRAVU ---
// Svaki moguci posjetilac prolazi okom ove metode:
app.Use(async (context, next) =>
{
var koJeDosaoIme = context.User.Identity.IsAuthenticated ? context.User.Identity.Name : "AnonimniX";
// Spremate u neki LOG file / bazu ovo ispod zapisano
Console.WriteLine($"Pristup: {koJeDosaoIme} na Adresni Trak: {context.Request.Path}");
await next(); // DOZVOLA S TIM - Idi dalje u zivu formu i kontrolere i nastavi put!
});
app.MapControllerRoute(...)
Authentication -> Authorization presudno
diktira validnu bezbjednost na rješenju i sistemu.