【问题标题】:MVC asp.net server side timer to prevent user from editing timerMVC asp.net 服务器端计时器,以防止用户编辑计时器
【发布时间】:2016-06-23 18:11:36
【问题描述】:

我有一个 MVC asp.net 测验应用程序。您有不定的时间来参加测验,如果时间用完,则会自动提交答案。

目前,我在 Javascript 中设置了计时器,控制器中保存的时间量 - Session["EndTime"]。但是,我的理解是用户可以编辑 Javascript 并在用 Javascript 实现时更改计时器。如果为 true,如何在 Controller 中运行计时器并在计时器用完后发送 Action?

【问题讨论】:

  • 如果您从不编辑会话结束时间,那么即使用户设法调整了 javascript 端,您也可以随时检查任何答案的服务器端时间戳与结束时间。

标签: javascript c# asp.net asp.net-mvc timer


【解决方案1】:

服务器不能强制浏览器提交任何东西,这就是 JavaScript 代码会做的事情。而且,是的,用户可以根据需要选择修改它。

服务器会做的是跟踪两件事:

  • “测试”实例的唯一标识符
  • “测试”开始时的日期/时间戳(或者相反,当它到期时,因为任一值携带相同数量的信息)

第一个值包含在发送到浏览器的表单中,基本上只是一个隐藏的表单域。当测试结果发布到服务器时,服务器端代码使用标识符来查找持久的日期/时间戳,以将其与当前日期/时间进行比较。如果超过预期的时间,则拒绝测试结果并出现错误。

基本上,服务器端代码不能强制用户提交结果。但它可以拒绝未及时提交的结果。

【讨论】:

  • 所以没有办法让一个安全的计时器在过期时提交表单?
  • @LoganJahnke:我猜这取决于您所说的“安全”是什么意思。 “测试”的术语由您呈现给客户的页面和其中的代码定义。 “安全”是服务器关注的问题。如果用户试图聪明并更改代码客户端,唯一的结果是用户未通过测试。这样“安全”就实现了。
  • 使用signalR我们可以强制客户端提交页面,我们可以在服务器上设置定时器,并在定时器到期时向客户端发送推送通知。一旦客户端收到推送消息,我们就可以在服务器上提交页面。
  • @AshishShukla:SignalR 并不神奇,客户端代码仍然像任何其他客户端代码一样受到用户干扰。 SignalR 的推送通知将建议 向客户端提交表单。但是,如果用户修改客户端代码或以某种方式欺骗测试,则该建议将被忽略。在这种情况下实施 SignalR 会显着增加复杂性,而不会带来任何好处。
猜你喜欢
  • 2014-07-05
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 2019-11-09
  • 1970-01-01
  • 2012-09-26
  • 2012-02-13
相关资源
最近更新 更多