也许是一个菜鸟问题,但我真的很困惑。
我正在尝试进行在线测验,用户必须在 4 个可能的答案之间进行选择。但我被卡住了,好吧,因为 1 个问题真的让我很困扰。所以:
我有一个 JavaScript 函数,当用户点击错误的答案时,它会改变按钮的背景颜色并禁用它。并且正确的答案按钮(提交)调用不存在的功能,只是为了迷惑人们,如果他们决定快速查看源代码。一切都很顺利,但后来我开始思考。如果用户决定更深入地查看我的源代码怎么办?他将能够看到我的 JavaScript 函数,而且,他可能不用真正玩就可以找出正确的答案。
有什么办法可以隐藏源代码(据我所知,JavaScript 不可能),但也许我可以使用别的东西?其他开发人员在这些情况下使用什么?有什么建议么?:)
4 回答
如果您想真正安全,您必须在服务器端进行(例如 PHP)。你可以做的让作弊者更难做的是用各种各样的 js 混淆器之一来混淆你的 javascript 代码,这种混淆器永远不会带来完全的安全性。
用户可以作弊的原因是答案在 JavaScript 代码中。
解决方案:不要将答案放在 JavaScript 代码中。而是将其保存在服务器上。
像这样:每当用户更改他们对问题的答案时......
- JavaScript 向服务器发送答案。
- 服务器回复 YES 或 NO。
- JavaScript 显示对用户的回复。
用户永远看不到答案,只知道答案是真是假。
tl; 博士学习 AJAX。
这是一个很好的问题,每个 Web 开发人员都应该问自己......
这是我们作为 Web 开发人员每天面临的一个主要问题。我们的 JavaScript 是可查看的,有时甚至是可编辑的。不相信来自客户的任何东西!
我通常做的是
- 在服务器上生成某种类型的唯一哈希
- 将此哈希嵌入 HTML 和 JavaScript。
- 将此哈希与任何请求一起发送到服务器。
- 通过再次重新创建哈希并确保它与发送的哈希匹配来验证服务器上的哈希。
哈希可以是项目 id、会话 id、一些盐和任何其他可识别的数据的串联,您可以重建这些数据以验证请求。
为了完成其他答案,提供学习如何设置服务器可能会花费您几天的时间,我将为您提供一个 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
文档。(;