Domanda

Sto creando una piccola pagina Web utilizzando PHP a cui si accederà come IFRAME da un paio di siti. Desidero limitare l'accesso a questo sito affinché funzioni SOLO all'interno del "approvato" siti e non altri siti o accessibili direttamente. Qualcuno ha qualche suggerimento? È possibile? Il sito PHP sarà Apache e i siti iframing del contenuto saranno probabilmente .NET.

Solo per chiarire, qualsiasi sito può visualizzare la pagina, purché sia ??iframe all'interno di un sito approvato. Voglio impedire alle persone di accedervi direttamente. Sto pensando che i cookie potrebbero essere una soluzione, ma non sono sicuro.

È stato utile?

Soluzione 7

Grazie per tutte le grandi idee! Penso che la soluzione con cui sto andando è un cookie di sessione impostato dall'approvazione iframing " posto. Qualcuno veramente determinato sarà ancora in grado di ottenere il contenuto, ma penso di poter prevenire la maggior parte degli abusi inventando un discreto "segreto". algoritmo basato su una sorta di segreto condiviso su entrambi i lati e il sito approvato ha impostato un cookie di sessione che verrà letto dal mio sito PHP. Se il cookie è valido e soddisfa i miei criteri, visualizzerò i contenuti, altrimenti non lo farò. Le informazioni che sto proteggendo non sono mission-critical, sto solo cercando di impedire che vengano abusate.

Altri suggerimenti

Purtroppo questo non sarà possibile.

Usando Javascript puoi verificare se la tua pagina è incorporata in un altro frame, ma questo non sarà infallibile poiché Javascript può essere disattivato nei browser di alcune persone.

Ad esempio, puoi eseguire il seguente javascript per reinventare la tua pagina se questa è l'intenzione:

if (top.location != location) {
  top.location.href = document.location.href ;
}

Pensando a questo ... Non sono convinto che sia completamente sicuro, ma ecco uno scatto mentre ci penso di più -

L'unico modo per farlo è se controlli i siti in cui verrebbero incorporati. Se li controlli, potresti passare il tempo, crittografato, dal set di frame al frame:

 <iframe src="http://yourdomain/frame.php?key=p21n9u234p8yfb8yfy234m3lunflb8hv" />

frame.php quindi decodifica il messaggio per trovare il tempo in un piccolo delta (diciamo 10 secondi). Poiché frame.php sa che solo i siti accettabili avrebbero potuto crittografare l'ora, sa che va bene mostrarsi. Altrimenti, non genera nulla.

Qualsiasi altra cosa, che sia javascript o HTTP_REFER, può essere falsificata, disattivata o aggirata.

E infatti, con quell'URL, un utente malintenzionato sarà in grado di mostrare il tuo frame ovunque, purché l'utente lo carichi entro 10 secondi. Quindi l'attaccante avrebbe semplicemente raschiato il sito accettato e afferrato la chiave. Se quel modello di minaccia è inaccettabile per te, allora non c'è davvero nulla che tu possa fare (tranne forse un protocollo ancora più complicato).

Lo implementerei nello stesso modo in cui Google implementa AdSense. Invece di far loro incorporare il codice iframe nel loro sito, invece di incorporare un po 'di javascript che include un numero di account:

<script type="text/javascript"><!--
myiframe_client = "12345";
myiframe_width = 728;
myiframe_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://www.example.com/scripts/show_iframe.js">
</script>

Almeno in questo modo puoi gestire chi visualizza i tuoi contenuti iframe in base all'account. Se qualcuno non autorizzato tenta di utilizzare il tuo iframe, puoi disabilitare l'account. Puoi anche esaminare le proprietà del documento tramite javascript (entro i limiti di sicurezza del browser) per impedire l'accesso non autorizzato.

La raschiatura dello schermo potrebbe essere una possibile soluzione qui.

Imposta l'elenco di accesso sul tuo sito per accettare solo le richieste provenienti dai server Web dei siti approvati ed emettere un token di sicurezza. Questa è la parte facile.

Il team di sviluppo alla loro estremità dovrà impostare un servlet di inoltro per ottenere il contenuto e quindi mostrarlo agli utenti (dopo aver riscritto gli eventuali URL pertinenti).

Questo può essere abbastanza complicato, ma saresti più in grado di controllare chi accede al sito. Inoltre, qualsiasi token di sicurezza che emetti non sarà visibile all'utente Web, poiché dovrebbe essere trasmesso solo tra i due server web.

Puoi MD5 (o crittografare per una migliore sicurezza) l'IP client usando un salt + data segreta e passarlo come parametro in iframe src url. Nell'iframe fai la stessa cosa e controlli se il risultato è lo stesso del parametro; in caso contrario, negare l'accesso

Non puoi controllare $ _SERVER ['HTTP_REFERER'] per assicurarti che includa una certa stringa?

if (strpos('http://example.com', 

Non puoi controllare $ _SERVER ['HTTP_REFERER'] per assicurarti che includa una certa stringa?

<*>

Nel tuo caso potresti voler prima analizzare l'indirizzo, quindi controllare se in_array () .

Questo non sarà a prova di errore in quanto le persone possono falsare il referrer, MA forse potresti fare qualche tipo di utilizzo delle chiavi con qualche altra comunicazione tra i 2 server. Se la chiave è stata utilizzata, allora non andare.

SERVER['HTTP_REFERER']) !== false) { // allowed }

Nel tuo caso potresti voler prima analizzare l'indirizzo, quindi controllare se in_array () .

Questo non sarà a prova di errore in quanto le persone possono falsare il referrer, MA forse potresti fare qualche tipo di utilizzo delle chiavi con qualche altra comunicazione tra i 2 server. Se la chiave è stata utilizzata, allora non andare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top