我正在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请求。 –