2014-02-28 91 views
1

我用<input type="hidden" />通過一定的價值,所以我想要做的隱藏字段是安全我有一個用戶的個人資料頁我這個如何讓隱藏領域安全?

$userprofilename = $_GET['username']; 

得到會員的用戶名時,一些機構發佈的任何東西的用戶,我得到的用戶名通過

<input type="hidden" name="userprofile" value="<? echo $userprofilename; ?>" /> 

但在谷歌瀏覽器的任何機構可以改變USERPROFILE值曲線,我怎麼可以把它安全嗎?

感謝

+1

您可以創建表單頁面上的會話和檢索它的提交頁面上,然後摧毀它的用戶 –

+0

後,不只是在Chrome中,幾乎在任何瀏覽器,您可以更改代碼。不建議這樣做。改用會話。 – PatomaS

回答

3

然後,而不是將其存儲在一個公開的形式,其存儲服務器會話內

代替

$userprofilename = $_GET['username']; 

session_start(); 
$userprofilename = $_SESSION['username']; 

當他們登錄,將其價值增加到會議

// on login 
session_start(); 
$_SESSION['username']=$userprofilename; 
+0

謝謝,但任何建議沒有會話 – user2839993

+0

然後,你可以使用任何可用的標識字段從數據庫中獲取它。您當前的代碼和問題,我們看到沒有規定這種情況下 –

+0

我使用'相對=「」'足夠的信息來傳遞值插入分頁這樣 ** **的Html代碼

後1

Like

後2

Like

後3

Like 我怎麼能安全相對 – user2839993

0

表單頁面

創建這樣

session_start(); 
$_SESSION['userprofilename'] = $userprofilename; 

,而不是這個隱藏

<input type="hidden" name="userprofile" valu="<? echo $userprofilename; ?>" />

在一個會話變量您的提交頁面

您可以按如下

session_start(); 
    $userprofilename = $_SESSION['userprofilename']; 

    // use it as $userprofilename and then unset it 
    unset($_SESSION['userprofilename']); 

因爲會話駐留在服務器上,並且不能被客戶看到這將是安全的恢復。通過查看HTML源文件或螢火蟲等

0

您可以通過加密的用戶名,然後解密它嘗試過的位置需要,如果你不想使用會話

+0

問題涉及傳遞數據的方式。如果您可以重新解釋您的答案,那麼它將非常接近OP的要求。 – PatomaS

0

最好將無法通過客戶端完全可以保留在服務器端。這是sessions用於:將值存儲在服務器端會話中,然後您可以在表單提交中檢索它。

但是,如果您不想使用會話,至少可以通過使用MAC(如hash_hmac)簽名隱藏值來檢測隱藏值是否被篡改。這裏有一個簡單的例子:

function create_hmac($key, $uri, array $params) 
    return hash_hmac('sha256', json_encode(array($uri, $params)), $key); 
} 
$secret = '7wzvtNgAVCTLPZ27P4L52yzc'; 

# on form creation 
$hidden = array(
    'userprofile' => $_GET['username'] 
); 
$hmac = create_hmac($secret, '/form/submit.php', $hidden); 
echo '<input type="hidden" name="hidden" value="'.htmlspecialchars(json_encode($hidden)).'">'; 
echo '<input type="hidden" name="hmac" value="'.$hmac.'">'; 

# on form submission 
$hidden = json_decode($_POST['hidden'], true); 
if ($_POST['hmac'] !== create_hmac($secret, $_SERVER['REQUEST_URI'], $hidden)) { 
    // invalid HMAC 
} else { 
    $_POST = $hidden + $_POST; 
}