2011-05-30 49 views
0

在將信息從一個頁面移動到另一個頁面時,是否有辦法保護PHP中鏈接中攜帶的變量?以便出於安全目的,護照號碼不會以其原始形式顯示在地址欄中。保護鏈接中攜帶的變量

<a href=\"edit_employee.php?$employee[passport_number]\">" . $row['first_name'];> 
+1

難道你不能簡單地傳遞一個毫無意義的員工ID嗎? – deceze 2011-05-30 08:55:17

回答

1

使用進行urlencode()

<?php 
$link = 'edit_employee.php?passport_number=' . urlencode($employee[passport_number]); 
echo "<a href=\"$link\">test</a>"; 

- 編輯 -

如果您不希望它顯示在地址欄上,請使用$ _COOKIE或$ _SESSION

<?php 
    // a.php 
    setcookie('number', $employee[passport_number]); 
// or $_SESSION['number'] = $employee[passport_number]; 


    <?php 
    //b.php 
    echo $_COOKIE['number']; 
// or $_SESSION['number'] 
+0

如何使用帶鏈接的cookie,使用特定條件從數據庫中搜索信息後,所有信息都將顯示爲鏈接 – Gatura 2011-05-30 09:22:00

1

您可以將員工的護照號碼存儲在會話,但它會更好地使用一個唯一的ID爲員工,而不是護照號碼引用它們。

0

當正從URL變量,你也許可以在URL中指定變量的類型,例如$passport_number=(int)$_GET['passport_number'];

+0

爲什麼-1?他詢問如何確保URL中的變量。 – Roman 2011-05-30 09:19:41

+0

他沒有詢問輸入驗證,他要求隱藏地址欄中的參數。另外機會是護照號碼不是純粹的數字,但包括其他字符([。\ - a-z])。 – igorw 2011-05-30 11:11:38

+0

@igorw,我同意護照號碼可能不是數字,但這僅僅是一個例子,如果你閱讀他的標題,以及他的問題的第一個問題,它會詢問有關確保urls中攜帶的變量_,我想當通過URL傳遞變量,驗證應該完成。 – Roman 2011-05-30 11:30:50

2

對這個問題的簡單回答是,通過在URL中放置一個「敏感」信息來公開(任何在使用該網站時看到該URL的人)。有很多方法可以通過對URL中的數據進行編碼來「隱藏」這些數據,但它們並不真正保護數據。

唯一的選擇,如果你想在URL中,剩下的就是用雙向加密方案加密信息。這是CPU密集型的,可能不是必需的。

正如deceze和Alex Coles所建議的,處理這種情況的一種方法是爲每個員工分配一個唯一的隨機ID號,然後使用該號碼從數據庫中提取敏感信息,防止其被放置在網址。鑑於你需要搜索(根據您的評論)這種解決方案似乎是最合適的,考慮這個例子:

員工姓名:李四

護照#:123456789

員工ID:2899

當你寫你的搜索代碼,只返回一個像這樣的鏈接:

<a href=\"edit_employee.php?$employee[employee_id]\">" . $row['first_name'];> 

那麼edit_employee.php頁面上簡單地將電子使用ID號從數據庫中獲取信息。

希望這會有所幫助。