2017-09-02 18 views
2

我正在製作一個測驗應用程序,其中4個用戶加入大廳(完成),然後領導開始測驗。在.NET MVC/JS/JQUERY中測驗應用程序,如何防止作弊?

當測驗開始時,問題會隨機選擇。用戶可以回答他們,然後點擊提交。每個問題都是定時的,這意味着用戶只有10秒的時間來回答問題。

這都是通過AJAX完成的,因爲我希望網站是實時的。我究竟會如何防止作弊?用戶可以手動編輯JS文件等。

我正在考慮獲取加載問題的確切時間+答案時間。如果它不在10秒內,他就是在作弊。這會起作用嗎,還是有更好更簡單的方法來做到這一點?

謝謝。

+0

使用防僞標記防止側腳本。如果在ASP.Net MVC框架中內置一個不滿足您的需要,那麼您必須創建自己的。 – Transcendent

+2

@Ashley,我的理解是Anti Forgery令牌可以防止跨站點腳本,但我不清楚如何防止黑客使用檢測工具篡改DOM。替換事件處理程序並解除舊的綁定。你提到的似乎是合理的。將敏感的邏輯移動到服務器端,在那裏選擇下一個問題並跟蹤計時以防止作弊。 – derloopkat

+0

@derloopkat是的,我有完全相同的問題。既然這兩個答案都提供了使用防僞令牌的結果,他們是否可以防止使用檢查工具等篡改代碼? – Ashley

回答

1

結論:既然沒有辦法,以防止在客戶端什麼,這實際上聽起來還行唯一的解決辦法是有服務器檢查一切。

GET請求,它請求問題並記錄時間。之後,一個JS定時器,如果倒計時結束,它會自動提交問題。用戶也可以手動提交答案(顯然)。答案POST,服務器記錄它的時間,將它與GET請求的初始時間進行比較。如果超過10秒,則拋出錯誤,並且不計算答案。

謝謝大家。

1

編輯

我認爲AntiForgeryToken是解決你的問題的解決方案。我讀了很多文章,以確保我的舊答案是正確的。

Hiding or Encrypting the javascript source code 1-

2- How to Disable HTML view source or Encrypt Html elements programatically?

3- How To Prove That Client Side Javascript Is Secure?

4- ASP.NET MVC - does AntiForgeryToken prevent the user from changing posted form values?

我得出結論:

AntiForgeryToken防止惡意站點是欺騙用戶轉換爲與orig相同的表單inal並將其發佈到原始網站。它並不妨礙你描述的場景。

真的沒有辦法完全做到這一點客戶端。如果此人擁有有效的身份驗證cookie,則無論頁面上的代碼如何,他們都可以製作他們想要的任何請求並將其發送到您的服務器。可以使用HtmlHelper.AntiForgeryToken with salt value

要使用這些傭工保護特定的形式,把一個Html.AntiForgeryToken()BeginForm,例如,

@using (Html.BeginForm("Users", "SubmitQuiz")) 
{ 
    @Html.AntiForgeryToken() 
    <!-- rest of form goes here --> 
} 

這將輸出類似如下:

<form action="/Users/SubmitQuiz" method="post"> 
    <input name="__RequestVerificationToken" type="hidden" value="saTFWpkKN0BYazFtN6c4YbZAmsEwG0srqlUqqloi/fVgeV2ciIFVmelvzwRZpArs" /> 
    <!-- rest of form goes here --> 
</form> 

接下來,來驗證傳入的表單帖子中,將[ValidateAntiForgeryToken]過濾器添加到您的目標操作方法。例如,

[ValidateAntiForgeryToken] 
public ViewResult SubmitQuiz() 
{ 
    // ... etc 
} 

Salt是任意的字符串。不同的鹽值意味着 將會生成不同的anti-forgery token。這意味着,即使攻擊者設法以某種方式獲得有效令牌,它們也不能在應用程序的其他需要鹽值的其他部分重複使用。

您可以爲不同的用戶創建不同的salts,如this

編輯

AntiForgeryToken()防止使用檢查工具這樣的代碼篡改:

在客戶端側

1-新的隨機anti-XSRF令牌將被生成。

2-使用來自步驟(1)的安全令牌生成反XSRF字段標記。

在服務器側(驗證令牌)

1-傳入會話令牌和令牌字段被讀出,並且從每個所提取的anti-XSRF令牌。在生成例程中,每個步驟(2個客戶端)中的令牌必須相同。

2-如果驗證成功,則允許繼續進行請求。如果驗證失敗,框架將拋出​​HttpAntiForgeryException

欲瞭解更多信息,請參閱this article

+0

@Ashley我將編輯部分添加到我的答案中,以解釋爲什麼它可以防止使用檢查工具篡改代碼。請看這個。 –

+1

這與問題無關。 –

+0

@StephenMuecke謝謝你的評論。我編輯了我的答案。謝謝,如果你告訴我關於編輯答案。 –

相關問題