也许是一个noob问题,但我真的很困惑。
我正在尝试进行在线测验,用户必须在4个可能的答案中进行选择。但我被卡住了,好吧,因为有一个问题真的困扰着我。所以:
我有一个JavaScript函数,当用户点击错误的答案时,它会更改按钮的背景颜色并禁用它。正确的答案按钮(提交)调用不存在的功能,只是为了让人们感到困惑,如果他们决定快速查看源代码。一切都很好,但后来我开始思考。如果用户决定深入查看我的源代码怎么办?他能够看到我的JavaScript功能,而且,他可能在没有真正玩的情况下找到正确的答案。
有什么方法可以隐藏源代码(据我所知,JavaScript不可能),但也许我可以使用别的东西?在这些情况下,其他开发人员使用什么?有什么建议? :)
答案 0 :(得分:6)
如果您想要非常安全,则必须在服务器端(例如PHP)执行此操作。你可以做些什么来使作弊者更难以通过this one之类的各种js混淆器来混淆你的javascript代码,这些混淆器永远不会带来完全的安全性。
答案 1 :(得分:5)
用户可以作弊的原因是答案在JavaScript代码中。
解决方案:不要将答案放在JavaScript代码中。将它保存在服务器上。
这样的事情:每当用户改变他们对问题的回答时......
用户永远不会看到答案,只知道答案是真还是假。
tl; dr 了解AJAX。
答案 2 :(得分:2)
这是一个好问题,也是每个网络开发者应该问自己的问题......
这是Web开发人员每天面临的一个主要问题。我们的JavaScript可以查看,有时甚至可以编辑。信任来自客户的NOHING!
我通常做的是
哈希可以是项目的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
文档。 (;