2013-03-08 53 views
-2

我使用一個腳本,用PHP編寫和jQuery,允許刮靜態網站:如何驗證用戶輸入

<?php 
if(isset($_GET['site'])){ 
    $f = fopen($_GET['site'], 'r'); 
    $html = ''; 
    while (!feof($f)) { 
    $html .= fread($f, 24000); 
    } 
    fclose($f); 
    echo $html; 
} 
?> 

jQuery的部分:

$(function(){ 
    var site = $(input).val(); 

    $.get('proxy.php', { site:site }, function(data){ 

     $('#myDiv').append(data); 

    }, 'html'); 

}); 

,你可以看到需要被刮掉的網站必須是有價值的。我想讓我的訪問者有能力設置自己的網站被刮掉。

問題是我無法弄清楚如何保護PHP部分。據我瞭解,輸入值是一個很大的安全風險,因爲任何東西都可以隨着價值發送。我已經遇到性能下降以及使用此代碼的幾個'電腦崩潰'。我不知道崩潰是否相關,但只有在我處理代碼時纔會發生。 無論如何,我真的很想知道如何驗證值(從輸入)發送到我的服務器,只有真正的網址應該大聲。我GOOGLE了好幾天,但我不能算出它(新的PHP)

PS如果你發現任何其他安全風險,請讓我知道..

+0

究竟是什麼,你希望達到什麼目的?你想防止什麼? – 2013-03-08 11:35:41

+2

如果你允許人們抓取任意的URL,添加任何一種明智的安全性將是地獄。你必須防止洪水,超時,有害的反應(例如太大)......爲什麼你首先提供這種公共服務? – 2013-03-08 11:35:43

+0

@皮卡嗨,我只需要驗證網址,我認爲這將解決最大的安全風險。當然我不能保證100% – Youss 2013-03-08 11:37:17

回答

1

我覺得你的主要安全問題,是你正在使用fopen閱讀url的內容,如果用戶想要讀取系統中的文件,那麼他必須發送路徑到該文件,如果腳本有足夠的權限,那麼他們將能夠訪問內容你的硬盤。

我會建議使用其他方法,如Curl或者至少,驗證用戶輸入,以確保它是一個有效的URL,對於這一點,我想看看一些regular expressions

祝你的代碼!在驗證

這裏

編輯是我的意思通過驗證的一個小例子。

<?php 
if(isset($_GET['site'])){ 
    if(validURL($_GET['site']) { 
    $f = fopen($_GET['site'], 'r'); 
    $html = ''; 
    while (!feof($f)) { 
     $html .= fread($f, 24000); 
    } 
    fclose($f); 
    echo $html; 
    } else { 
    echo "Invalid URL, please enter a valid web url (i.e: http://www.google.com)"; 
    } 
} 

function validURL($url){ 
    //here goes your validation code, returns true if the url is valid 
} 
?> 

但如果你是新太瞭解這一點,我建議去爲更簡單的例子,因爲這是非常基本的邏輯。

+0

是的,當然有效,但我該怎麼做......用Jquery? – Youss 2013-03-08 11:40:48

+0

@Youss不,在PHP上,增加了一個例子來展示我的意思 – Deleteman 2013-03-08 11:45:00

+0

對不起我新的PHP ..doesnt函數validURL($ url)必須在代碼的頂部而不是在下面? – Youss 2013-03-08 11:50:41

0

它很傷心,你找不到關於這個話題的任何東西。它是一件普通的事情。請參閱下面的鏈接。它可能有幫助。

PHP validate input alphanumeric plus a few symbols

http://phpmaster.com/input-validation-using-filter-functions/

+0

非常感謝:) – Youss 2013-03-08 11:50:59

+0

@youss不客氣。請不要忘記註冊。 – GBRocks 2013-03-08 11:55:30

+0

我做了upvote,你有+1 ...有人downvoted你...我點擊+1但它不工作我以下的消息;您最後的投票在回答 32分鐘前 您的投票現在鎖定在 除非這個答案被編輯 – Youss 2013-03-08 12:13:48