2013-08-16 51 views
-3

當用戶提交任何表單時,網頁會發送一個$_GET['variable_name'],並提供如下所示的URL:www.mywebsite.com/index.php?variable_name_here='yes'如何阻止人們操縱URL以在PHP中提交表單?

但是,人們只需將網址www.mywebsite.com/index.php?variable_name='yes'寫入網站的地址欄中即可訪問此部分腳本,而無需實際提交表單!

這是一個問題!它打破了與表單提交相關聯的腳本的特定部分!這是因爲與$_GET['variable_name']有關的腳本部分無法獲取應該由表單發送的變量,因爲它永遠不會被提交!

當他們通過將URL發送回www.mywebsite.com/index.php來操縱URL時,如何阻止人們訪問腳本的特定部分?

P.S. :這是用戶提交的數據通過一種形式,然後被處理(無SQL或參與任何相似的軟件)

+2

等等...您問及回答了這個問題?或者你的答案是否可能是一種可能的方法? – Touch

+0

爲什麼你不使用「POST」方法呢? –

+0

改爲使用POST。 – DevlshOne

回答

-2

www.mywebsite.com/index.php?variable_name='yes'重定向到www.mywebsite.com/index.php你需要打開一個HTML頭之前,包括以下下面的代碼!此解決方案適用於整個網站中的任何$ _GET變量,如果將其放置在includes("filename_here")之內,則無需更改代碼。

//if there are any $_GET variable(s) set (doesn't matter what the name of the variables are) 
if (! empty($_GET)) 
{ 
    //if there is no record of the previous page viewed on the server 
    if(! isset($_SERVER['HTTP_REFERER'])) 
    { 
     //get requested URL by the user 
     $redir = $_SERVER['PHP_SELF']; 

     //split parts of the URL by the ? 
     $redir = explode('?', $redir); 

     //redirect to the URL before the first ? (this removes all $_GET variables) 
     header("Location: $redir[0]"); 
    } 
} 
+0

有需要更改代碼。如果使用數據庫,則需要防止SQL注入。如果從數據庫中讀取值並將其放在頁面上,則需要防止HTML /腳本注入。 – developerwjk

+0

您可以忽略額外的輸入或使用isset函數 – Touch

+0

HTTP_REFERER不可靠 –

0

如果你擔心的人越來越到您的網站無需登錄或沒有正確的參數,可以應先檢查,看看是否正確$ _GET存在變數使用isset()。如果您期望的所有參數都允許它們通過,否則使用header('Location: /index.php');強制重定向。