2012-11-14 74 views
0

今天,我在我的web應用程序中發現了一個安全漏洞(請原諒,如果這是因爲我無法在SO上找到它而提及)。考慮下面的代碼:HTML前端安全

<html> 
    <head> 
     <script> 
      intv = setTimeout(function(){test()} , 10000); 
      function test(){ 
       val = document.getElementById('tt').value; 
       alert(val); 
       intv = setTimeout(function(){test()} , 10000); 
      } 
     </script> 
    </head> 
    <body> 
     <input type="hidden" value="10" id="tt"> 
    </body> 
</html> 

問題:

該代碼將提醒一個輸入字段的值與間隔的10秒。第一次提醒後,我通過查看其源代碼來更改瀏覽器中的輸入字段值。它會提醒我稍後添加的價值,這對我不利。

真實的生活場景:

我有一個虛擬教室,其中學生和老師都參加課堂討論。我每隔5秒發送一次ajax請求以更新後端課程的持續時間,並在db中持續時間字段中添加+5,之後學生必須根據他們在課程中所花費的時間向我們付款。如果一個聰明的人只是在瀏覽器中編輯源代碼,而不是在5秒後發送請求,他會改變爲1小時(爲了爭辯)來欺騙我的邏輯。如何防止客戶端的任何非法活動?

+9

你爲什麼不使用服務器的時鐘?記錄會話開始時的服務器時間,並在完成時記錄服務器時間,然後使用這些值計算課程長度。 –

+0

此問題僅與此場景無關。問題是如何避免這種事件,用戶正在改變他們不應該改變的價值。雖然你的建議很好。 –

+3

沒有辦法。那時你就進入了客戶領域,他們有權力做他們想做的事情。 –

回答

0

沒有辦法阻止用戶更改JavaScript值。

相反,您應該驗證服務器上的輸入。

在這種情況下,如評論中所建議的,您應該使用服務器時間記錄開始和結束時間。

+0

好吧,我明白了。除了我提到的情況。如果我必須在一小時後將用戶踢出去,該怎麼辦?顯然這些計算是在客戶端完成的。 –

+0

只要拒絕向他們發送更多數據(是否爲視頻饋送?請將其關閉!) –

+0

存儲用戶已被刪除並在數據請求中進行檢查。如果他們已被刪除 - 忽略他們對數據的請求。 –

0

簡單地檢測他們做出的每一個請求(如果它是虛擬教室,有什麼事是正確的?),並在服務器端保存當他們訪問到某個地方(數據庫)。有一個會話開始和結束的表格。