用于在线测验的JavaScript?

时间:2012-11-11 22:30:50

标签: javascript

也许是一个noob问题,但我真的很困惑。
我正在尝试进行在线测验,用户必须在4个可能的答案中进行选择。但我被卡住了,好吧,因为有一个问题真的困扰着我。所以:

我有一个JavaScript函数,当用户点击错误的答案时,它会更改按钮的背景颜色并禁用它。正确的答案按钮(提交)调用不存在的功能,只是为了让人们感到困惑,如果他们决定快速查看源代码。一切都很好,但后来我开始思考。如果用户决定深入查看我的源代码怎么办?他能够看到我的JavaScript功能,而且,他可能在没有真正玩的情况下找到正确的答案。

有什么方法可以隐藏源代码(据我所知,JavaScript不可能),但也许我可以使用别的东西?在这些情况下,其他开发人员使用什么?有什么建议? :)

4 个答案:

答案 0 :(得分:6)

如果您想要非常安全,则必须在服务器端(例如PHP)执行此操作。你可以做些什么来使作弊者更难以通过this one之类的各种js混淆器来混淆你的javascript代码,这些混淆器永远不会带来完全的安全性。

答案 1 :(得分:5)

用户可以作弊的原因是答案在JavaScript代码中。

解决方案:不要将答案放在JavaScript代码中。将它保存在服务器上。

这样的事情:每当用户改变他们对问题的回答时......

  1. JavaScript将答案发送给服务器。
  2. 服务器回答“是”或“否”。
  3. JavaScript显示对用户的回复。
  4. 用户永远不会看到答案,只知道答案是真还是假。

    tl; dr 了解AJAX。

答案 2 :(得分:2)

这是一个好问题,也是每个网络开发者应该问自己的问题......

这是Web开发人员每天面临的一个主要问题。我们的JavaScript可以查看,有时甚至可以编辑。信任来自客户的NOHING!

我通常做的是

  1. 在服务器上生成某种类型的唯一哈希
  2. 将此哈希嵌入到HTML和JavaScript中。
  3. 将此哈希与任何请求一起发送到服务器。
  4. 通过再次重新创建散列并确保它与发送的散列相匹配来验证服务器上的散列。
  5. 哈希可以是项目的id,会话ID,某些盐以及您可以重建以验证请求的任何其他可识别数据的串联。

答案 3 :(得分:0)

要完成其他答案,提供如何学习如何设置服务器可能需要花费几天时间,我将简要介绍一个5分钟的指南,设置一个简单的node.js服务器来隐藏你的答案

安装node.js。

使用以下内容创建名为server.js的文件。

var express = require("express"),
    app = express();
app.get("first_answer",function(req,res){
   res.send("b");
});
app.listen(8080);

打开终端,输入

npm install express
cd path_to_the_folder_you_placed_the_file
node server.js

这将安装express.js模块并运行服务器。

现在,在您的网站上,使用jQuery,只需从服务器请求答案。使用jQuery的示例:

var user_answer = ...
$.get("http://localhost:8080/first_answer",function(answer){
    if (answer == user_answer)
        alert("you got it right!");
});

有关更复杂的示例和服务器的最佳使用,请阅读express.js文档。 (;