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 -