2015-11-24 51 views
0

直到現在我一直在使用窗體中的隱藏字段來傳遞數據到動作php。但是,我意識到這是一個巨大的安全風險的應用程序,並希望受到教育最好的方法,目前從隱藏的領域在PHP中傳遞表單數據?安全地傳遞ID來形成動作?

<input type="hidden" value="sensitive_info"> 

亞歷

+1

它取決於數據,你的方法可能沒問題,但**會議**想到。 –

+0

除非您希望客戶端能夠更改數據,否則不要使用隱藏的輸入。請將這些信息保留在服務器上。順便說一下,除非你使用我推薦的AJAX,否則你的輸入必須有一個'name'屬性來與PHP一起工作。 – PHPglue

回答

0

我認爲會議可能是你在找什麼。

請參閱http://www.w3schools.com/php/php_sessions.asp瞭解使用它們的簡單指南。

你在你的PHP腳本的最頂部需要session_start();,然後你可以存儲信息,像這樣:

$_SESSION["stuff"] = "sensitive info"; 

然後簡單地訪問下一頁:

$stuff = $_SESSION["stuff"]; 

簡單:)

PS確保session_start();位於使用會話變量的每個php腳本的頂部。

+0

我從來沒有真正想過表單數據的會話,是最好的方法嗎? – Elevant

+0

這是將某些內容從前端頁面傳遞到非用戶輸入的後端的最安全方式,是的。請記住,如果它類似於您想要傳遞的IP地址,或者使用PHP生成的內容,則只需在後端使用$ _SERVER或其他任何內容,而不是使用會話或隱藏元素。 –

0

如果因某種原因無法使用會話,則始終可以加密該ID。這可能不是超安全的,但會阻止除了最堅定的東西之外的所有東西。

<?php 

define("KEY", "Something much more random than this"); 

function encrypt($key, $plaintext) 
{ 
    $iv_size = openssl_cipher_iv_length('AES-256-CBC'); 
    $iv = openssl_random_pseudo_bytes($iv_size); 
    $ciphertext = openssl_encrypt($plaintext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); 
    return base64_encode($iv . $ciphertext); 
} 

function decrypt($key, $ciphertext) 
{ 
    $iv_size = openssl_cipher_iv_length('AES-256-CBC'); 
    $ciphertext = base64_decode($ciphertext); 
    $iv = substr($ciphertext, 0, $iv_size); 
    return openssl_decrypt(substr($ciphertext, $iv_size), 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); 
} 

$encrypted_id = encrypt(KEY, $database_id); 
?> 

<input name="foo" type="hidden" value="<?php echo $encrypted_id?>"/> 
相關問題