Circa un mese fa ero nel mezzo di una delle mie classi "Applicazioni distribuite" e il professore ci stava spiegando come "" "correttamente" "" autenticare gli utenti in un server.
Per dimostrare come impedire agli utenti di accedere a tutti i file in una determinata directory (cioè con nome "privato"), il professore ci ha mostrato un codice JSP simile al seguente pseudocodice:
String URI = uri.getRequest();
if (URI.contains("/private/") {
if (userIsAuthenticated()) grantAccess();
else redirectToLogInPage();
}
Naturalmente, ho capito cosa c'era che non andava e cosa poteva essere un difetto di sicurezza. Se un utente richiede un URL come mysite.com/private%2Fmypage
, l'URI non conterrà la stringa letterale "/ private /" in modo che l'utente possa accedere.
Ieri mi sono ricordato di quella lezione, quindi, per quanto ne fossi curioso, ho scoperto che non solo tutti i miei precedenti progetti web in Uni hanno avuto questa vulnerabilità, ma anche alcuni siti Web di aziende serie hanno questo problema. Puoi accedere a molte pagine in cui non dovresti essere in grado (sostanzialmente pagine del profilo utente quando non hai effettuato l'accesso), solo tramite la codifica percentuale di qualche carattere nell'URL.
Quindi, poiché ho capito che ci sono molte persone che non si preoccupano troppo di questo problema, sono un po 'confuso. Non è un grosso difetto? Quali potrebbero essere alcuni attacchi che potrebbero essere sfruttati sfruttando questo problema? Vorrei solo sapere, da un punto di vista teorico, se possibile, quanto male potrebbe ottenere questo problema per un sito che non gestisce correttamente la codifica url.
P.S: So che una soluzione plausibile potrebbe essere anche controllare se l'URL richiesto è codificato in percentuale e negare l'accesso ad esso. O anche se ci piacerebbe andare oltre e implementare una soluzione più sicura, potremmo utilizzare un Key Distributed Center come Kerberos. Tuttavia, non capisco perché tu possa trovare siti Web seri con questo difetto e non sembra un grosso problema per loro.