Ciao a tutti! Ho una domanda un po' spinosa da porvi...ecco la situazione:
ho una pagina che viene usata in embed tramite iFrame su siti esterni, qualcosa di molto simile all'embed dei video di YouTube.
Per motivi di sicurezza ho pero' bisogno di sapere il dominio del sito che sta effettuando l'embed.

Ho visto che l'oggetto Request.UrlReferrer contiene quest'informazione, ma non penso sia affidabile al 100%.

Qualche idea?

Grazie!

Davide Guida
Technical Architect @ Razorfish Healthware
http://davideguida.altervista.org
11.655 messaggi dal 09 febbraio 2002
Contributi
ciao,

mizrael ha scritto:

Ho visto che l'oggetto Request.UrlReferrer contiene quest'informazione, ma non penso sia affidabile al 100%.

Come mai, c'è un motivo per cui pensi che non sia affidabile? L'informazione ti viene passata dal browser dell'utente, quindi un attore tutto sommato affidabile, che si occupa di includerla nella richiesta web alla tua pagina.
Il discorso cambia completamente se il tuo iframe deve visualizzare dati riservati e, in questo caso, fare affidamento al referrer è del tutto inadeguato perchè la richiesta può essere forgiata a piacimento da un malintenzionato, che può simulare la provenienza da un dominio qualsiasi.

mizrael ha scritto:

Per motivi di sicurezza

Spiega bene che requisiti di sicurezza hai.

Ad ogni modo, l'alternativa è quella di usare il javascript per leggere il valore di window.location.hostname ma ciò non è possibile se lo fai dall'interno dell'iframe, dato che ti è impedito dalla same-origin policy. I domini (il tuo e quello di chi include il tuo contenuto) sono diversi e perciò nessuna delle due parti può usare il javascript per curiosare nel documento dell'altra.

Allora valuta se modificare il codice di embedding. Anziché usare un tag <iframe>, usa un tag <script> che richiami un file javascript sul tuo server.
La same-origin policy non si applica per i tag <script>, quindi così riuscirai a leggere il nome del dominio e, se fosse valido, usare una delle tecniche di manipolazione del DOM per iniettare l'iframe (o dell'html) nella pagina.

Attenzione perché anche questo sistema potrebbe non essere sufficiente. Un webmaster malintenzionato potrebbe escludere il controllo del dominio e incollare direttamente il codice dell'iframe nella sua pagina. Potresti fare così (ma anche questo sistema che mi è venuto in mente ora andrebbe testato e non è garantito che ti protegga adeguatamente).
  • Il tag script richiama un file asp.net sul tuo server e nel farlo gli passa in querystring un valore generato casualmente e il nome del dominio.
  • La pagina asp.net memorizza quel valore casuale + il nome del dominio da qualche parte e restituisce al client il codice javascript che servirà al client per produrre l'iframe.
  • L'iframe viene prodotto e nel suo attributo src dovrà essere presente il valore generato casualmente e il valore che hai letto da window.location.hostname.
  • Lato server, la pagina asp.net richiamata nell'iframe leggerà il valore casuale e, se è tra quelli conosciuti e il nome del dominio corrisponde, allora produrrà dell'output. Prima di terminare la sua esecuzione, rimuove il valore casuale dall'elenco di quelli conosciuti
  • Se la pagina riceve un valore ignoto, allora non produrrà alcun output.


Ma ripeto, se i dati contenuti nell'iframe sono personalizzati o possono essere riprodotti solo all'interno un dato dominio, allora dovrai implementare un meccanismo di autenticazione vero e proprio, magari che fa uso di chiave privata.

ciao
Modificato da BrightSoul il 08 gennaio 2013 20.48 -

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.