161 messaggi dal 07 settembre 2009
Salve a tutti =)
forse sono un pò paranoico ma avrei bisogno di sapere se è possibile modificare un file .js tramite firebug o programmi simili (nello stesso modo in cui è possibile modificare l'html o magari in altri modi)...

Questo poichè devo passare dei dati tramite ajax che identificano l'utente e che vengono controllati lato server ad ogni caricamento di pagina, e non vorrei che potessero essere cambiati direttamente sul js mandando tutto il mio lavoro a monte...

Avrei preferito lavorare solamente con le Session ma con ajax le session "non funzionano"...

Come sempre grazie per la disponibilità


Davide
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

doppiomango ha scritto:

se è possibile modificare un file .js tramite firebug o programmi simili

Sì, i maggiori browser dispongono di una Web Console che ti consente di eseguire comandi javascript arbitrari nel contesto della tua pagina. Magari da lì non si riesce a modificare il javascript sorgente (un modo si troverebbe) ma è comunque possibile cambiare i valori delle variabili, eseguire chiamate ajax, e così via.
Uno smanettone avrebbe abbastanza margine per far danno se il server, per autenticare l'utente, facesse affidamento unicamente su valori che gli arrivano in chiaro dal client.

doppiomango ha scritto:

Avrei preferito lavorare solamente con le Session ma con ajax le session "non funzionano"...

Spiega come funziona la tua applicazione. Per caso la tua chiamata ajax invoca un HttpHandler .ashx?

Anche per le chiamate ajax, il browser invia al server sia il cookie di autenticazione che quello di sessione creati da ASP.NET, quindi il fatto che la sessione non funzioni deve essere un problema da risolvere lato server.
Comunque, se il tuo scopo è quello di autenticare l'utente, usa la FormsAuthentication di ASP.NET che creerà un cookie dal contenuto criptato. Il client certamente potrà modificare il contenuto del cookie ma così facendo ne comprometterà la validità. Così è impossibile che riesca a compiere operazioni per conto di altri utenti.

ciao
Modificato da BrightSoul il 16 maggio 2013 20.16 -

Enjoy learning and just keep making
161 messaggi dal 07 settembre 2009
Intanto grazie per la risposta =)

La mia applicazione è abbastanza semplice, mi limito a recuperare dei dati dal db appartenenti al profilo con cui si è loggati, richiamando tramite ajax una semplice pagina .aspx che ritorna un JSON.

In alcuni casi la chiamata ajax esegue delle operazioni sul db (INSERT UPDATE DELETE) passando magari l'id della riga da eliminare o modificare.

Lato server effettuo sempre un controllo dell'id dell'utente loggato per verificare che stia lavorando su un record "di sua proprietà", il problema è che anche l'id dell'utente viene passato tramite ajax, prendendolo dalla querystring (camuffata).

Ovviamente lato server ho memorizzato l'id in una sessione così da controllare ad ogni aggiornamento di pagina se la querystring è corretta o è stata modificata manualmente.

Purtroppo con i cookie non ho mai lavorato ne ho mai usato le FormsAuthentication di ASP.NET, quindi non saprei come procedere per quella strada.


Davide
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, prego!

doppiomango ha scritto:

Purtroppo con i cookie non ho mai lavorato ne ho mai usato le FormsAuthentication di ASP.NET,

Non fa nulla, è un'ottima occasione per provarlo.
E' semplice da mettere in pratica e richiederà pochissime modifiche al codice. Un piccolo prezzo che però ti eviterà di fornire l'id dell'utente in querystring.

Per prima cosa, imposta la forms authentication nel web.config. All'interno del nodo system.web metti questa linea (ma controlla che non ci sia già).
<authentication mode="Forms" />


Immagino che tu abbia già la tua pagina di login. Quella va bene, puoi mantenerla così com'è, devi solo aggiungere questa linea subito dopo aver controllato che lo username e la password digitate dall'utente sono corrette.
//la variabile userName deve contenere il nome utente (o il suo id numerico, se lo preferisci)
System.Web.Security.FormsAuthentication.SetAuthCookie(userName, true);
Finito. Il metodo SetAuthCookie si occuperà di creare, crittografare e inviare al client un cookie di autenticazione che il browser restituirà al server in tutte le sue richieste successive.

Quindi, quando si apre una pagina o viene eseguita una richiesta ajax, tu potrai recuperare il nome dell'utente in questo modo:
var nomeUtenteLoggato = User.Identity.Name;

Così non devi neanche creare variabili di sessione o avere logica personalizzata di riconoscimento dell'utente.

Quando finalmente vuoi disconnettere l'utente, allora chiama:
System.Web.Security.FormsAuthentication.SignOut();

Questo invaliderà il cookie e l'utente risulterà non più autenticato.

Prova, ne vale la pena. Eventualmente prima sperimentalo su un nuovo progetto contenente giusto una pagina di test.

Per approfondire, qui su Aspitalia trovi uno speciale che ti spiega cos'altro puoi fare con la FormsAuthentication.
http://www.aspitalia.com/focuson/640/Speciale-Forms-Authentication-ASP.NET.aspx

ciao
Modificato da BrightSoul il 17 maggio 2013 23.27 -

Enjoy learning and just keep making
161 messaggi dal 07 settembre 2009
Grazie =)
Sono tutte cose semplici da implementare ma che non conoscevo.

Solo una curiosità, quando lavoro a un progetto con le session, queste spesso e volentieri mi scadono (per ovvi motivi). Con i cookie avrò lo stesso problema?

Ancora grazie sei stato di grande aiuto =)


Davide
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, prego :)

doppiomango ha scritto:

le session, queste spesso e volentieri mi scadono

Già, anche il mantenimento della sessione, per default, si avvale di un cookie ma si tratta di un cookie non persistente che perciò viene subito rimosso alla chiusura del browser.

Usando il metodo SetAuthCookie che ti mostravo ieri, invece, hai l'oppotunità di creare un cookie persistente che "sopravvive" al riavvio del browser e che può durare molto più a lungo, ammesso che l'utente non lo rimuova prima in qualche modo (ad esempio sloggandosi o cancellando la cache del browser).
Di solito è l'utente che sceglie se creare un cookie persistente o no. Puoi raccogliere la sua preferenza con una checkbox nella pagina di login che puoi chiamare "Mantieni l'accesso" o "Resta loggato".

Puoi configurare la durata del cookie nel web.config. Espandi il nodo authentication in questo modo.
<authentication mode="Forms">
  <!-- il timeout è in minuti. Qui ho impostato una durata di 1 settimana -->
  <forms timeout="10080" />
</authentication>

L'elemento forms che vedi qui sopra ti permette di configurare anche altre cose, come l'url della pagina di login, al quale l'utente verrebbe ridirezionato se provasse ad entrare da anomimo in una pagina riservata.

ciao!

Enjoy learning and just keep making
161 messaggi dal 07 settembre 2009
Non ci crederai ma ho sempre desiderato fare un login con la classica checkbox "resta loggato", ma non avevo idea di come si facesse e non ho mai avuto modo di indagare

Grazie tante =)
Da ora i miei login cambieranno per sempre.

(nel caso ci fossero dei dubbi non c'è ironia ma sono serissimo)


Davide
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Davide,
Prego! Mi fa piacere sapere che il consiglio è stato utile :D

Usare la FormsAuthentication è molto comodo perché è ASP.NET ad occuparsi del lavoro "delicato", cioè quello che riguarda la sicurezza dei dati nel cookie e del successivo riconoscimento del client.

Se prossimamente volessi approndire l'argomento, puoi leggere anche di come ASP.NET ti consenta di gestire la fase di autorizzazione, cioè il decidere se quell'utente può accedere ad una sezione del sito oppure no, anche in base al suo ruolo.
http://www.aspitalia.com/articoli/asp.net2/membership_roles_api.aspx
La membership e la roles API sono un po' meno semplici da configurare, ma comunque più sicure e rapide rispetto al dover sviluppare una soluzione personalizzata.

ciao!

Enjoy learning and just keep making

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.