2009-05-13 23 views
10

Genellikle, yanıt ararken, belirli web sitelerinin, yönlendiren, örneğin google.com ise sundukları bilgileri okumasına izin vereceğini buldum. Yine de, doğrudan bilgiye bağlanırsanız, kullanılamaz olacaktır.PHP - Referer yeniden yönlendirme komut dosyası

http://example.com/ref_red.php?referer=http://google.com/&end=http://example.net/ 

Notlar:

Ne arıyorum şöyle seçimim bir Yönlendireni ayarlayacaktır en küçük PHP komut dosyası ve bir hedef olduğunu

  • ref_red.php Örneğimdeki komut dosyasının adı.
  • referer ve http, https, ftp kabul etmelidir. örneğin, http://example.com/some/rr/print.pl?document=rr:
  • yönlendiren ve http://end.com kadar basit veya karmaşık bir tipteki bir URI içerebilir.

NOT: Bir cevapta üzerinde önerildiği üzere, bu ekleme. Komut, tam bir proxy değildir. Yalnızca ilk HTTP isteği, başvurucunun ayarının tek amaçlı için (resim, vb. Gibi sonraki istemlerde değil) tarafından proxy edildi.

+0

Lütfen "example.com", "example.org", "example.net" gibi başka bir alan adı veya ".example" ile biten başka alan adları için kullanın. Bkz. RFC 2606. – Gumbo

cevap

11

bu fonksiyon size belirtilen yönlendirenden

oldukça Önemsiz olmalıdır sorgu Parms idaresiyle ilgili herhangi bir http url alıp bunu bir başlangıç ​​noktası vermelidir, bu yüzden

<?php 

    echo geturl('http://some-url', 'http://referring-url'); 

    function geturl($url, $referer) { 

     $headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg,text/html,application/xhtml+xml'; 
     $headers[] = 'Connection: Keep-Alive'; 
     $headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8'; 
     $useragent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'; 

     $process = curl_init($url); 
     curl_setopt($process, CURLOPT_HTTPHEADER, $headers); 
     curl_setopt($process, CURLOPT_HEADER, 0); 
     curl_setopt($process, CURLOPT_USERAGENT, $useragent); 
     curl_setopt($process, CURLOPT_REFERER, $referer); 
     curl_setopt($process, CURLOPT_TIMEOUT, 30); 
     curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); 

     $return = curl_exec($process); 
     curl_close($process); 

     return $return; 
    } 

?> 
yapmak i o kısmını bırakacak
+0

Bu bir çekicilik gibi çalışır. Teşekkürler! –

+0

Bu çözüm hala bugün gerçekten çalışıyor mu? Görünüşe göre (doğrudan) ziyaretler ve yönlendiren yok. –

0

Yönlendirici, herhangi bir sunucu tarafı mekanizması tarafından değil, tarayıcınız tarafından belirlenir. PHP'de, uzak sunucunun isteğini yapan ve referans üstbilgisini uygun şekilde ayarlayan bir proxy oluşturabilirdiniz. Bir Firefox eklentisini kullanmak daha yararlıdır, ör. http://www.stardrifter.org/refcontrol/.

Düzenleme: Özel bir yönlendiren üstbilgisi ile bir PHP proxy'si yazmak istediğinizi netleştirmek için sorunuzu yeniden yazabilirim. Yönlendirici parametresini alıp iletmek için muhtemelen http://sourceforge.net/projects/poxy/ gibi bir şeyi değiştirebilirim.

Tekrar düzenleme: Ne sorduğunuzda açık olabilirsiniz, ancak imkansızı istemek mümkün kılmaz. Tarayıcı yönlendirme başlığını ayarlamaktan sorumludur; yeni bir kaynağa yönlendirmesine neden olan URI'yi kullanır. "Lütfen http://example.net adresini ziyaret edin, ancak bunu yaptığınızda aslında www.foo.com olduğumu iddia edin" yazan bir senaryo soruyorsunuz. Sunucunun, nereden geldiğini öğrenmek için tarayıcıya talimat vermesi için bir mekanizma yoktur.

Sanırım bazı kıvrımlı JavaScript korsanlığı ile mümkün olabilir, ancak siyah şapka anlamında hacklenecektir - bir web sitesini yönlendiriciyi aldatmaya zorlayabilecek bir web sitesi gerçek bir güvenlik deliği olacaktır.

+0

Referansın istemci tarafından ayarlandığını tamamen anlıyorum. Bundan sonra kullanacağım komut * bu * müşteri olacak ve belirtilen başvuruyu ayarlayacak. Bir Firefox eklentisi bir seçenek değildir, çünkü bu tür betikleri genel bağlantılarda kullanmak istiyorum. –

+0

@Adam, Ne sorduğum ve beklenen davranış konusunda çok netim. Bazı proxy'lerin gerçekleştirdiği bir işlevi gerçekleştirebilir, ancak bu bir proxy değildir. Tek aradığım, yönerge başlığını da belirleyen PHP üzerinde yazılmış bir yönlendirme betiğidir. –

+0

@David Bir yönlendirme mekanizmasının yanlış anlaşıldığına inanıyorum. Bu durumda, komut dosyanız yönlendireni belirlediğinde, bağlantıya yapılan istek üzerine bunu yaparsa, o zaman bu bilgiyi istemciye geri göndermesi gerekir ve bu nedenle, tüm bilgileri kendi başına proxy haline getirecektir. veya istemciyi bağlantıya yönlendirir, böylece tüm yönlendiren saklamayı imha eder. Komut dosyası yalnızca içeriği kısmen proxy olsa bile, yönlendirici yine de resim/CSS/JS vb. Için gönderilir. –

2

Internet'te bulunan hizmetlerden birini kullanarak yönlendirenlerin (adreslerini belirleyerek) saklamasına izin verebilirsiniz, ancak gerçek yönlendiren olmayan belirli bir yönlendireni uygulayamazsınız. Kullanıcı, hedef web sitesine yönlendirilmeden önce söz konusu web sitesine yönlendirilmelidir (bir yönlendirici olarak görünecektir).bu hizmetlerin

Bir: http://linkanon.com

düzenleme:

Eğer bir vekil gibi davranır geçerlidir PHP'de bir kullanıcı aracısı yazmayı, şimdi benim yorumunu soru değişti, ama o zaman bu kadar yaklaştığında yana

Bir suç faaliyeti, çünkü gerçek bir web sitesinde olduğunu düşünebilen bir kullanıcıya üçüncü taraf bir web sitesi açacaksınız, aslında içeriğinizi (geçirdiğiniz içerik) yükleyecektir. Bu kriminal aktiviteyi gerçekleştirmek için (bir kullanıcı adı ve parola okumaya çalışmaktan bir adım uzaktasınız), üçüncü tarafın web sitesi içeriğini, sahte yönlendiriciyi belirten kendi yazılı kullanıcı aracınızı kullanarak PHP ile yüklersiniz. Web sitenizin ziyaretçisine çıktı. bir HTTP başlıklarını göndermenizi sağlar PHP'de fonksiyon, ($ başlık) başlık budur:

header("Referer: http://example.org"); 

yerine yardım etmeye çalışanlara karşı Bağırarak, bunu uygun protokoldür (HTTP okumaya çalışın hangi Dünyaya Yönlendirme başlığına ilişkin belirtim: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html (Bkz. Bölüm 14.36).

Ayrıca, istemci tarafı hakkında olduğunu görebileceğiniz http://en.wikipedia.org/wiki/Referrer_spoofing'u da okumak isteyebilirsiniz. PHP sunucu tarafıdır. Tek yapmanız gereken PHP tarafından oluşturulan bir istemci kodu (Javascript) yazmayı denemek, ancak herhangi bir şansınız varsa, o zaman kullanıcının dünyasına giriyorsunuz.

+0

Siz iddia doğru değil. Bir gönderenin ayarlanması tamamen mümkündür ve sağladığınız bağlantı (kullanmayı tercih etmeme rağmen) bunu kanıtlar. –

+0

Evet, Firefox eklentisi gibi bir şeyle mümkündür, ancak web sitenize ziyaretçinizin tarayıcısına giren bir betik sakladığınız gibi değil. PHP'de bir "tarayıcı" yazabilirsin, ama bunu yapmak istemezsin. – jbasko

+0

"Ziyaretçilerin tarayıcısına gir"? Neden bahsediyorsun? Ciddi anlamda. Sadece girdimi tekrar oku, dikkatli düşün (eğer gerçekten önemsersen) ve geri dön. –