2013-02-13 17 views
8

Moje pytanie jest proste. Użyłem następującej metody zezwalania na dostęp do skryptu php za pośrednictwem nazwy domeny strony odsyłającej, ale chcę zezwolić na dostęp tylko dla polecających pasujących do pełnego adresu URL.PHP Zezwalaj na dostęp do określonego adresu URL/strony odsyłającej

<?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; 
} 
?> 

Więc jeśli URL strony wywołującej pasuje http://www.domain.com/page.html następnie umożliwić dostęp else if zablokować.

+0

To nie będzie bezpieczne. Mogłem łatwo uzyskać dostęp do twojej strony, jeśli chciałem. – Peon

+2

Ok. Więc do czego nas potrzebujesz? – str

+0

Te globale są wysyłane przez przeglądarkę. Każdy może je modyfikować. –

Odpowiedz

20

To nie będzie bezpieczne, ponieważ dane strony odsyłającej można łatwo sfałszować. Jeśli jednak nadal odpowiada Twoim potrzebom, powinieneś już mieć dobry kod, ponieważ $_SERVER['HTTP_REFERER'] zawiera pełny adres URL strony odsyłającej, a nie tylko domenę. Faktycznie, twój obecny kod wymaga pewnych korekt, ponieważ nie może działać tak:

<?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"; 
?> 

Zauważ, że jeśli sprawdzić czy HTTP_REFERER jest ustawiona przed sprawdzeniem, czy to, co chcesz, ludzie się do skryptu bez polecający ustawić w ogóle, więc powinieneś to sprawdzić w każdym przypadku. Teraz sprawdzenie konkretnego adresu URL jest znacznie prostsze:

<?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

Bardzo dziękuję za to, czego szukałem. Bardzo doceniane. – C0nw0nk

+0

Czy to też działałoby jako dopasowanie ciągów zapytań na końcu adresu URL? "page.html? 123" – C0nw0nk

+0

Tak, dopasuje się również do nich. – Gargron

6

Co starasz się chronić?

Nigdy nie należy ufać HTTP_REFERER, ponieważ może zostać sfałszowany (jak zauważyli inni). Również niektóre zapory sieciowe i oprogramowanie zabezpieczające będą przepisywać lub usuwać odnośnik, a nie wszystkie przeglądarki będą je poprawnie zgłaszać.

Jeśli to wrażliwe dane, osobiście przekazałbym skrót między stronami.

Powiązane problemy