11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


ma così chiunque potrebbe effettuare chiamate a quelle actions da un qualsiasi dominio, e se riuscisse ad inviare delle credenziali sarebbe un problema;

Guarda, CORS non blocca sicuramente un utente malintenzionato in possesso delle credenziali.
Potrebbe scrivere una qualsiasi applicazione per Windows e spammarti di richieste autenticate, se volesse. CORS ti permette solo di dare indicazioni ad un browser e non ha effetto quando la richiesta arriva da un altro tipo di client.

ciao,
Moreno

Enjoy learning and just keep making
710 messaggi dal 13 novembre 2008
Contributi
Guarda, CORS non blocca sicuramente un utente malintenzionato in possesso delle credenziali.


si questo è certo, non era mia intenzione fare affidamento su CORS, difatti l'ho abilitato su tutte le origini senza problemi! :)

volevo dire, dato che per fare dei POST da ajax devo abilitare AllowCredentials() su CORS e settare withCredentials: true nella chiamata ajax perchè passo da un dominio ad un altro ed i POST hanno l'attributo [Authorize]

questo potrebbe esporre l'applicazione a livello di sicurezza?

se si ho pensato ad un action filter (v. punto 4) che verifica alcune cose, origine e host della richiesta per esempio, per maggior sicurezza, altrimenti posso cestinare l'action filter...!

termino qui lo giuro! grazie!
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


questo potrebbe esporre l'applicazione a livello di sicurezza?

no, perché le action sono protette dall'attributo [Authorize] e quindi non possono essere abusate da utenti anonimi.


che verifica alcune cose, origine e host della richiesta per esempio, per maggior sicurezza

Il filtro in questo caso non fornisce alcuna sicurezza in più. Ricorda che è un sistema è sicuro solo quanto lo è l'anello più debole della catena.
Dato che la tua action può essere invocata usando un client http qualsiasi (che può forgiare la richiesta a piacimento), viene meno l'utilità di filtrare per dominio di provenienza.

Comunque non mi sembra che il tuo sistema sia insicuro: le action sono già protette e quindi senza credenziali non è possibile usarle.

Qual è stato il motivo per cui hai scritto l'action filter? Quale tipo di attacchi hai considerato?

ciao,
Moreno

Enjoy learning and just keep making
710 messaggi dal 13 novembre 2008
Contributi
ciao, ho omesso di dire un particolare:
è vero che le action di inserimento e delete richiedono autenticazione, ma una action è GET, quella che recupera tutti i commenti e non richiede autenticazione in quanto si vuole che i commenti siano visibili anche agli utenti non autenticati; l'action filter permette di filtrare l'origine e l'host, verifica a db la corrispondenza di tenant- dominio e host, e permette la fuoriuscita di dati o meno. Se per ipotesi la richiesta fosse inoltrata da un dominio non registrato verrebbe rifiutata; è aggirabile? certo che si, perché come dici tu

...la tua action può essere invocata usando un client http qualsiasi (che può forgiare la richiesta a piacimento)


infatti se da Postman imposto gli header in un certo modo la richiesta viene accettata...

in sostanza non mi piaceva l'idea che qualcuno potesse richiamare una action, api, ecc. al di fuori dell'app e mi sarebbe piaciuto un controllo nel filter che verifichi incontrovertibile che la richiesta provenga solo da dove voglio io; ma se gli header possono essere riscritti da una applicazione client....

a posteriori mi è capitato di leggere qui e questo è stato di conforto sul fatto che, serva o meno, l'implementazione del filter sembra corretta
https://www.owasp.org/index.php/CORS_OriginHeaderScrutiny
Countermeasure
Option B: We can scrutiny the Origin header value on server side

il mio filter esegue i punti 1.2.3. non il punto 4. che in effetti però sembra essere il punto più interessante da implementare

ma comunque mi domando ancora se tutto questo serva davvero..?


ciao.
Modificato da teo prome il 15 novembre 2016 13.48 -
Modificato da teo prome il 15 novembre 2016 13.50 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


ma comunque mi domando ancora se tutto questo serva davvero..?

Io penso di no, perché il tuo filtro offre una resistenza molto blanda che può essere aggirata con un minimo sforzo.
E' sufficiente che un utente osservi la richiesta che il browser invia al server per riuscire a replicarla da un proprio client HTTP.

Con questa consapevolezza, potresti addirittura decidere di abbracciare il fenomeno anziché combatterlo. Perché non predisponi un feed RSS dei commenti per ciascun tenant, in modo che sia più semplice per gli utenti seguire la discussione ed eventualmente continuare a commentare?
Non rinunciare al dare ai tuoi utenti una buona esperienza d'uso solo per paura che quale malintenzionato vada a scaricarsi i commenti (che sono pubblici).


il punto 4. che in effetti però sembra essere il punto più interessante da implementare

La cache dell'IP potrebbe tornarti utile per capire se ci sono client che stanno inviando troppe richieste nell'unità di tempo tali da farti pensare ad un bot che sta cercando di fare scraping dei contenuti o chissà cosa.
In quel caso è bene porre una limitazione anche per evitare che il tuo server debba essere impegnato nel rispondere ad un solo client.
http://www.aspitalia.com/script/1200/Limitare-Numero-Richieste-ASP.NET-Web-API.aspx

Oppure limita le richieste a livello sistemistico, configurando opportunamente il firewall.

ciao,
Moreno

Enjoy learning and just keep making
710 messaggi dal 13 novembre 2008
Contributi
ciao, si buona l'idea del feed, sono d'accordo!

La cache dell'IP potrebbe tornarti utile per capire se ci sono client che stanno inviando troppe richieste nell'unità di tempo


infatti, anche perchè l'app è su Azure, e la richiesta di risorse si paga, in effetti quella era la mia preoccupazione maggiore.

grazie dei consigli, ciao
427 messaggi dal 13 novembre 2009
Salve,
volendo utilizzare un sistema differente dall'identity MS, ad esempio creare le mie tabelle user, role ecc...e utilizzare www.domain.com per la login e creare un token valido anche per gl ialtri sottodomini, come fare?
Con FormsAuth membership generavo una machinekey da inserire sui singoli web.config dei siti.
Mi potete dare supporto di dare procedere con aspnet core volendo implementare il crosssite e un ad esempio Dapper come ApplicationUser, Role ecc...

grazie
Modificato da flaviovb il 25 luglio 2019 08:28 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.