我正在Rails中進行基於在線計算機的測試。每個問題都有一個形式爲/questions/<id>
的頁面網址。
每個問題的頁面上都有一個「下一個」按鈕,指向下一個問題,如/questions/<another-id>
。我不希望用戶手動輸入任何問題的網址並轉到該頁面。
有什麼辦法可以實現這一點,最好是服務器端解決方案。如何限制對rails中頁面的訪問,除非用戶通過特定頁面的鏈接來訪問?
0
A
回答
2
我對你有一個服務器端解決方案可能是將解決你的問題如下說明如下......
假設,你有一個固定的鏈接,用戶可以開始測試。
一旦用戶開始測試,然後添加問題-ID到會話像下面...
會話[:電流問題-ID] =參數[:question_id]
總是檢查下一個問題ID增加一個sesssion問題ID,如果匹配,然後顯示問題或不做任何重定向回。
該解決方案將工作,如果你有問題的序列,如1,2,3 ... n。
4
您可以使用:
Friendly ID Gem,這將你的ID轉換成團狀,從而使最終用戶無法確定究竟是傳遞到URL參數。
1
有點像巴拉特瑞裏:
就可以構建結合你的問題Id和連接到用戶會話的隨機數建立了一個ID的URL。
您可以使用SHA1(或您選擇的算法)組合這兩個值。例如:
問題編號:123
祕密會話哈希:857c9e05-8ad0-4d6b-8112-5f442a731dc1(SecureRandom.uuid
上的會話#創建)
計算您摘要:
Digest::SHA1.hexdigest "#{question_id}#{secret_session_hash}"
=> e951774237433335a6c9c0928d5691ca0c2a31b5
建立您的網址:
website/question/123?key=e951774237433335a6c9c0928d5691ca0c2a31b5
你必須確保你的控制器摘要你PARAMS收到[:鍵]就是消化你計算相同。
通過這種方式,您可以合理地確保您的用戶不會作弊,並且他無法將網址提供給其他人。
相關問題
- 1. 限制訪問頁面,除非來自特定頁面
- 2. 限制訪問頁面,除非來自特定頁面
- 3. 限制對特定頁面的訪問
- 4. Rails:限制訪問特定頁面
- 5. 限制訪問非認證用戶的特定頁面
- 6. 限制對特定用戶的網站公共頁面訪問
- 7. 限制訪問特定頁面
- 8. 限制用戶同時訪問頁面
- 9. 限制直接的頁面訪問
- 10. 通過.htaccess限制直接文件夾訪問,除非通過特定鏈接
- 11. 限制對colorbox的頁面訪問
- 12. 限制用戶只訪問特定頁面一定次數
- 13. 通過要求頁面瀏覽的順序來限制對特定頁面的訪問
- 14. Django:限制訪問頁面
- 15. 限制訪問頁面php
- 16. Django。限制頁面訪問
- 17. 用戶能力限制訪問特定頁面只在wordpress
- 18. Symfony2.4.2限制對特定頁面的訪問
- 19. 限制直接訪問錯誤頁面
- 20. 如何限制訪問Magento中未登錄用戶的頁面
- 21. 限制訪問使用ASP.NET的頁面
- 22. 限制訪問php中的頁面
- 23. 限制訪問網頁,除非用戶是從PayPal定向的
- 24. 如何限制訪問SOLR特定頁面,如「Core Admin」?
- 25. 限制用戶對於某個特定頁面的訪問 - WordPress的
- 26. php頁面訪問。鏈接頁
- 27. 如何限制用戶在特定頁面上的訪問? (Drupal,php,FileMaker Pro 10)
- 28. 如何通知用戶他沒有訪問頁面的權限?
- 29. 如何限制通過ip訪問ActiveAdmin登錄頁面?
- 30. 限制某些用戶對頁面的訪問
作爲一個簡單的(但不是非常安全的)解決方案,你可能有「下一步」按鈕來提交表單(也許是空的),並且只允許/ questions/id路徑在POST中可用而不是GET?這種方式輸入URL將不會工作,因爲它會導致GET請求。 –