2016-04-18 17 views
0

我有一個表單,我需要驗證$_SERVER['HTTP_REFERER']是否補全,如果是,則在數據庫中提交後傳遞HTTP_REFERER。問題在於,當您提交表單$_SERVER['HTTP_REFERER'] =表單所在的位置時,我需要用戶來自表單的HTTP_REFERER。 我嘗試這樣做:驗證HTTP_REFERER是否設置然後傳遞信息

if(!isset($_SESSION['REFERER'])){ 
    $_SESSION['REFERER'] = $_SERVER['HTTP_REFERER']; 
} 

$_SESSION['REFERER']將是其中的形式託管的位置。

+0

閱讀您的表單中的數據'verify'和'HTTP Referrer'都無法相處。如果您在瀏覽器中使用隱私模式,則可能會刪除引用者。無需推薦人即可獲得合法請求。 – DanFromGermany

+1

您是否在您設置會話的頁面的頂部寫了session_start()?如果不是會話將無法正常工作。 – merdincz

+0

我有'session_start()' –

回答

0

你可以做這些方針的東西在窗體上:

<input type="hidden" name="referrer" value="<?= htmlspecialchars($_SERVER['HTTP_REFERER']) ?>"> 

這種方式,用戶可以在這個數據發佈到你。我想你打算讓用戶回到他們登錄後訪問的頁面,只記得兩件事:

  • 惡意用戶可以自己修改引用鏈接,所以你需要小心用戶發送的內容是爲了避免服務器受到攻擊。
  • 惡意用戶可以操縱其他人的推薦人。

您需要檢查您的引薦來源是否爲網址,並且您需要檢查其來源是否位於您自己的域中。

之後,您可以只是

<?php $originalreferrer = $_POST['referrer']? $_POST['referrer'] : 'default_value'; 
+0

我不能使用隱藏,因爲它可以被修改,而不是用於登錄。我需要使用會話來存儲信息,但似乎我不能存儲引用時,用戶來到形式 –

+0

您的示例引入了XSS漏洞 – DanFromGermany

+0

@DanFromGermany這就是爲什麼我指出,這不是完美的,他需要確保一切都被檢查並進行雙重檢查。 –