2014-11-22 63 views
1

我已經閱讀了幾篇關於在用戶操作登錄/等時重定向到上一頁的帖子。大多數人提到通過HTTP_REFERRER獲取上一頁的URL是不可靠的/不安全的。通過GET安全地傳遞/檢索PHP中的引用頁面?

我的問題是,我可以在URL的末尾添加一些信息,例如login.php?referrer=mainlogin.php?referrer=prof,並且依賴這些變量不被欺騙,CRSF'd,以任何方式更改?

POST會更好/更糟?有沒有可靠的/安全的方式來實現我所追求的目標?

基本上,我試圖找到最好的方式來獲取PHP中的引用頁面,以便它可以被重定向到沒有惡意意圖導致網站故障的風險。

TIA。

編輯:場景:

用戶訪問一個網頁的評論,但需要先登錄後才能發表評論,所以login to comment鏈接將被放置在頁面上。當用戶點擊login to comment鏈接時,其目標將是login.php?comment20303,在訪問登錄頁面並提供驗證的憑據後,它們應被帶回到它們在登錄之前發起的comment20303頁面。

REEDIT :我的問題歸結爲,將重定向url附加到登錄頁面,通過GET訪問它,並重新使用它將它們返回到原始頁面安全?從下面的評論看來,答案是否定的,並非沒有一些有效性檢查。

回答

0

我經常會引用頁放入一個隱藏字段在我的形式

<input type="hidden" name="ref" value="login.php"/> 

然後在我的目標頁面,我會使用帶有GET變量設置爲告訴登錄頁面轉診爲什麼它已經重新定向回

$ref = trim(strip_tags($_POST['ref'])); 

//something causes an error (incorrect password maybe)====== 
$error = "true"; 
$msg = urlencode("Login Incorrect"); 
//no harm in putting the referring page in the GET but I don't think you need it for a login process. 
header('location: '.$ref.'?error='.$error.'&msg='.$msg); 
die(); 

回到登錄頁面,如果它被設定,它告訴我,我從形式來目標和有一個錯誤,我會處理錯誤

if (isset($_GET['error']) && $_GET['error'] == "true"){ 
    $error = true; 
    $msg = trim(strip_tags($_GET['msg'])); 

//Echo out the msg if it is set somewhere in your HTML 
} 

我更願意在提交表單時使用POST。 GET最容易用於重定向。

編輯:基於您的評論

  1. 用戶正在輸入註釋和評論有一個系統生成的ID。
  2. 用戶未被認證,從而被重定向爲reg與ID /登錄在URL
  3. 用戶寄存器/再次日誌傳遞URL
  4. 系統認證ID和因爲,都有一座$ _GET [「commentID」]它插入將用戶與評論相關聯的db條目
  5. 將用戶返回到具有URL和句柄中的ID的評論編輯區域。

總是修剪和剝離GET

+0

我打算使用它是說,評論頁面,當用戶沒有登錄的方式,他們不能發表評論,所以我想加上' ref = comment20304'到登錄URL的末尾,即'login.php?comment20304',所以一旦用戶通過login.php驗證了他們的登錄信息,他們可以被重定向回到他們在登錄之前查看的頁面。我也考慮過POST,但是,我在某處讀過POST也不安全。基本上我想要一些安全的東西,以便我的用戶不會被重定向到old-xxx-ladies.com等,而不是評論20304。 – IIIOXIII 2014-11-22 07:09:08

+0

當然,只要您將id與新用戶相關聯,然後將它們發送回評論編輯區域,就可以添加評論ID。這樣他們不能嘗試不同的ID並編輯它們,因爲它們必須與用戶相關聯。 – silversunhunter 2014-11-22 07:11:37

+0

但是隱藏的字段是相當容易最容易操縱... – baao 2014-11-22 07:17:20