2014-04-21 98 views
1

我有一個非常大的表單,分爲5個子表單。當你從form1轉到form2時,form1中的信息存儲在DB中,並且創建了一個userId。然後在form2中,這個userId被添加爲一個隱藏的輸入。事情是這樣的:使用隱藏輸入檢索用戶數據安全嗎?

<form action="" method="post"> 
    <input type="hidden" value="userIDnumber" id="userId" /> 
    <input type="hidden" value="<?php echo base_url();?>" id="url" /> 
    //form data 
    <input type="button" id="prevButton" value="Prev" /> 
    <input type="submit" value="Next" /> 
</form> 

如果用戶決定要回去到Form1編輯數據,當點擊「返回」按鈕,將出現以下情況:

 var prev = document.querySelector('#prevButton'); 
     if(!prev.addEventListener){ 
      prev.attachEvent('onclick', prevPage); 
     }else{ 
      prev.addEventListener('click', prevPage, false); 
     } 

     function prevPage(e){ 
      var userId = document.getElementById('userId').value; 
      var url = document.getElementById('url').value; 
      var form = document.createElement('form'); 
      form.setAttribute('method', 'post'); 
      form.setAttribute('action', url + 'form/1'); 
      form.style.display = 'hidden'; 

      var input = document.createElement("input"); 
      input.setAttribute("type", "hidden"); 
      input.setAttribute("name", "userId"); 
      input.setAttribute("value", userId); 

      form.appendChild(input); 
      document.body.appendChild(form); 
      form.submit();    

     } 

我在做什麼是創造一個隱藏的形式,並以這種形式添加一個隱藏的字段與UserId,以便當form1我可以檢索用戶剛發佈的數據和更新數據庫,如果用戶更改任何東西。

我的問題是,這是一種安全的方式來檢索用戶數據?我對JavaScript非常陌生,所以我不確定如果做這樣的事情,攻擊者可以通過直接插入其ID來訪問其他用戶的數據。

如果是這樣,那麼做什麼是正確的安全方法?我想可能會使用會話,但我工作的客戶端不想讓用戶登錄。

我還沒有發現任何與此有關的問題,但如果有我道歉,請親切指給我它在哪裏。

謝謝你的時間。

+0

一個id只是一個數字,所以除非攻擊者有權訪問你的數據庫,否則這個數字是毫無意義的。 – edhedges

+2

然後,您可以生成一些每個用戶的密鑰,並在表單提交中使用它。 – Cthulhu

+0

@edhedges你仍然可能不希望任何人能夠指定任何id並搞亂某些用戶的數據(即使攻擊者沒有獲得任何東西)。 – Cthulhu

回答

0

當用戶訪問我的網頁,我創造,我創建一個用戶名稱空間這樣一個全局對象:

APP.user = {}; 

在這個對象,你可以存儲你所需要的性能,您可以檢索用戶當用戶登錄時,使用Ajax從服務器獲取數據。

您在瀏覽器內存中獲得一個包含鍵值對的簡單對象。例如:

APP.user = { 
    user_id: 'kgy', 
    firstname: 'kim', 
    lastname: 'gysen', 
} 

實際上,這些數據也是公開的。
當數據涉及敏感數據時,將數據存儲在DOM /全局對象空間從不安全。
當然,無論如何,用戶需要登錄才能訪問這些數據。

有一件事是,這種方法會更快,因爲沒有必要抓取DOM,只是爲了獲得跨不同頁面的本地用戶數據。

+0

但用戶必須登錄才能安全? – Ant100

+0

對象在您以用戶身份登錄後僅存儲用戶數據。如果您需要不同形式/頁面的數據,這非常有用。您不需要每次都向服務器發出請求,因爲數據將存儲在客戶端。 – Trace

+0

啊好的!問題是客戶端不希望用戶登錄,他希望任何人都能夠在不登錄的情況下填寫表單 – Ant100