javascript - .NET MVC/JS/JQUERY中的问答应用,如何防止作弊?

标签 javascript c# jquery ajax asp.net-mvc

我正在制作一个测验应用程序,其中 4 个用户加入大厅(已完成),然后领导者开始测验。

测验开始时,系统会随机选择问题。用户可以回答这些问题,然后单击“提交”。每个问题都有计时,这意味着用户只有 10 秒的时间来回答问题。

这一切都是通过 AJAX 完成的,因为我希望网站是实时的。我究竟该如何防止作弊?用户可以手动编辑JS文件等

我正在考虑获取问题加载的确切时间+回答时间。如果不是在 10 秒内,他就是作弊。这可行吗,或者有更好、更简单的方法吗?

谢谢。

最佳答案

编辑

我认为 AntiForgeryToken 是解决您问题的正确解决方案。我阅读了很多文章以确保我的旧答案是正确的。

1- Hiding or Encrypting the javascript source code

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 可防止恶意网站诱骗用户使用与原始表单相同的表单并将其发布到原始网站。它不会阻止您所描述的场景。

确实没有办法完全在客户端完成此操作。如果此人拥有有效的身份验证 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 is just an arbitrary string. A different salt value means a different anti-forgery token will be generated. This means that even if an attacker manages to get hold of a valid token somehow, they can’t reuse it in other parts of the application where a different salt value is required.

您可以为不同的用户创建不同的salt,例如 this .

编辑

AntiForgeryToken() 使用如下检查工具防止篡改代码:

在客户端

1- 将生成一个新的随机 anti-XSRF token 。

2- 使用步骤 (1) 中的安全 token 生成反 XSRF 字段 token 。

在服务器端(验证 token )

1- 读取传入 session token 和字段 token ,并从每个 token 中提取 anti-XSRF token 。生成例程中的每个步骤(2 个客户端)的 anti-XSRF token 必须相同。

2- 如果验证成功,则允许请求继续进行。如果验证失败,框架将抛出​​ HttpAntiForgeryException

有关更多信息,请参阅 this article

关于javascript - .NET MVC/JS/JQUERY中的问答应用,如何防止作弊?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46016157/

相关文章:

javascript - 按值访问 XML 节点

c# - ValidationGroup 并有效地验证多个文本框 asp c#

c# - 无法从Elasticsearch获取带有NEST的任何文档

javascript - 在 Javascript 中重定向到之前的 ROUTE

javascript - OnClick函数无法获取一个 block 的 'value'属性的值,但它可以获取另一个 block 的值

javascript - 如何从Cypress工具中的元素中获取值?

javascript - iscrollview 和 jquery 移动弹出窗口底部内容隐藏

c# - 为什么这个 Path.Combine 不起作用?

当元素到达页面顶部时 jQuery 改变位置

javascript - 创建子类别选择框 onChange