2013-02-13 13 views
8

Quindi la mia domanda è semplice Ive ha utilizzato il seguente metodo per consentire l'accesso allo script php tramite il nome di dominio del referrer ma voglio consentire l'accesso solo ai referrer che corrispondono all'url completo.PHP Consentire l'accesso a URL/referente specifici solo

<?php 
if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != 'domain.com') 
{ 
echo "Eexcuting code here"; 
} else { 
echo('Hot Linking Not Permitted'); 
// display some message/image/video 
exit; 
} 
?> 

Quindi, se l'URL di riferimento corrisponde http://www.domain.com/page.html quindi consentire l'accesso altrimenti se bloccarlo.

+0

Questo non è sicuro. Potrei facilmente accedere alla tua pagina, se volessi. – Peon

+2

Ok. Allora, per cosa ti servono? – str

+0

Queste icone vengono inviate dal browser. Tutti possono modificarli. –

risposta

20

Non sarà sicuro perché i dati dei referrer possono essere facilmente falsificati. Tuttavia, se si adatta ancora alle tue esigenze, allora dovresti essere già a posto con il tuo codice, dal momento che lo $_SERVER['HTTP_REFERER'] contiene l'URL di referrer completo e non solo il dominio. In realtà, il codice attuale ha bisogno di alcuni aggiustamenti, perché non può funzionare così:

<?php 
// This is to check if the request is coming from a specific domain 
$ref = $_SERVER['HTTP_REFERER']; 
$refData = parse_url($ref); 

if($refData['host'] !== 'domain.com') { 
    // Output string and stop execution 
    die("Hotlinking not permitted"); 
} 

echo "Executing code here"; 
?> 

Si noti che se si controlla se HTTP_REFERER è impostato prima di verificare se si tratta di ciò che si vuole, la gente sarebbe arrivare al vostro script senza alcun referrer impostato a tutti, quindi dovresti controllarlo in ogni caso. Ora, il controllo di un URL specifico è molto più semplice:

<?php 
// This is to check if the request is coming from a specific URL 
$ref = $_SERVER['HTTP_REFERER']; 

if($ref !== 'http://domain.com/page.html') { 
    die("Hotlinking not permitted"); 
} 

echo "Executing code here"; 
?> 
+0

Grazie mille gargon proprio quello che stavo cercando. Molto apprezzato. – C0nw0nk

+0

Inoltre, funzionerebbe come corrispondenza per le stringhe di query alla fine dell'URL? "page.html? 123" – C0nw0nk

+0

Sì, corrisponderà anche a quelli. – Gargron

6

Che cosa stai cercando di proteggere?

Non si dovrebbe mai fidarsi di HTTP_REFERER in quanto può essere falsificato (come altri hanno sottolineato). Inoltre, alcuni firewall e software di sicurezza riscrivono o rimuovono il referer e non tutti i browser lo segnalano correttamente.

Se si tratta di dati sensibili, personalmente passerei un hash tra le pagine.

Problemi correlati