Bir url için tek bir giriş PHP giriş doğrulama

3 Cevap php

Ben kullanıcı herhangi bir sitenin url belirlemenizi sağlar, bu çok basit bir komut dosyası var. Komut HTML sayfasında nesnenin içinde kullanıcıların tercih siteyi görüntülemek için bir nesne etiketinde "veri" özniteliği url değiştirir.

Kullanıcı nesnesi içinde benim siteden herhangi bir sayfayı yükleyemez yüzden benim kodu gösterecektir fark var, çünkü nasıl girişini doğrulamak olabilir.

Kodu:

 <?php
 $url = 'http://www.google.com';
 if (array_key_exists('_check', $_POST)) {
    $url = $_POST['url'];
 }
 //gets the title from the selected page
 $file = @ fopen(($url),"r") or die ("Can't read input stream");
 $text = fread($file,16384);
 if (preg_match('/<title>(.*?)<\/title>/is',$text,$found)) {
         $title = $found[1];
 } else {
         $title = "Untitled Document";
 }
 ?>

Edit: (more details) This is NOT meant to be a proxy. I am letting the users decide which website is loaded into an object tag (similar to iframe). The only thing php is going to read is the title tag from the input url so it can be loaded into the title of my site. (Don't worry its not to trick the user) Although it may display the title of any site, it will not bypass any filters in any other way.

Ben de im doğrulama bakarak bu yüzden ne yapıyorum ile ilgili güvenlik farkındayım.

3 Cevap

Gahooa söylediğim gibi, ben ateşle oynuyorsun çünkü, burada ne yaptığınızı çok dikkatli olmak gerekir düşünüyorum. Bu güvenle yapmak, ancak kullanıcı verir URL'den veri ile ne çok dikkatli olmak mümkün.

Eğer olsa yaşıyorsanız belirli bir problem için, ben, bir dosya bir giriş olsun eğer olur varsayalım böylece örneğin kutuya birisi "index.php" eğer. Yapmanız gereken tek şey fopen yerine yerel dosya açma ağ yöntemini kullanır, böylece onların URL "http://" ile başlar emin olun. Fopen hattı daha önce böyle bir şey hile yapmak gerekir:

if (!preg_match('/^http:\/\//', $url))
    $url = 'http://'.$url;

parse_url: http://us3.php.net/parse_url

Siz düzeni ve ev sahibi için kontrol edebilirsiniz.

Şema http ise, o zaman emin host web sitesi değildir olun. Ben noktalar arasındaki bölümünü kapmak için, preg_match kullanarak öneririm. Www.google.com veya google.com gibi, kelime google almak için preg_match kullanın.

Ev sahibi bir ip ise, ben bu durumda ne yapmak istediğinize emin değilim. Varsayılan olarak, gebelik maç sadece (u. Com önce sitename almak için preg_match kullanmayı deneyin varsayarak) orta 2 numara ve nokta alacağı

Are you aware that you are creating an open HTTP proxy, which can be a really bad idea?

Hatta URL içeriğini almak gerekir mi? Neden kullanıcının tarayıcı yapalım olmadığını URL ile sağlayarak?

Eğer URL bilinen "beyaz liste" karşı doğrulamak düşünün, URL almak gerekiyor varsayarsak. Eğer bilinen bir listesine kısıtlamak değil, o zaman tekrar açık vekil vardır ...

Iyi bir HTTP url sağlamak ve daha sonra asıl isteği yapmak için CURL uzantısını kullanmak için normal bir ifade (gebelik) kullanın.

Mixing the fopen() family of functions with user supplied parameters is a recipe for potential disaster.