在PHP和Ajax中构建安全测验的好方法

时间:2016-01-23 18:39:20

标签: javascript php jquery ajax

我正在构建一个PHP / jQuery / AJAX定时测验。 正如您可能从AJAX中看到的那样,我完全想要测验,以便用户不必刷新页面或提交任何表单。

所以,让我们以数学测验为例。 我想要的是,每当用户回答一个问题时,我想让它说出答案是对还是错,但我不能做的事情就是安全地从服务器接收答案,这样用户就无法阅读(例如,不是纯文本)

我想到了一种以脚本或某些东西不能用来作弊的方式来解决问题的方法。要做到这一点,我将使页面请求来自服务器的问题,并返回一堆图像URL(使用PHP创建),这样一切都很好并且可以解决。

但是我的问题是客户页面如何在没有用户搞清楚的情况下知道答案?我已经考虑过每次回答问题时向服务器发送一个AJAX请求,并检查它是对还是错,但这将花费太多时间来完成测验。

另一种方式(目前为止最好的方法)是发送一个AJAX请求来获取答案,从中返回的项目是一堆随机字母和数字以及类似“解密”代码, jQuery脚本可以用来计算答案并检查它们是否在每个问题之后(因此基本上混淆了答案,但是使用这种方式,用户可以读取我的jQuery代码并使用它来找出它如何解决问题和然后解读作弊的答案)

另一种方法是通过AJAX在测验结束时提交所有用户zanswers,然后服务器检查并返回正确/错误的数量,然后告诉用户他们哪些是对或错但是我想避免这种情况,因为我想要一种方式让他们在每个问题之后知道他们是否得到了最后一个问题。

所以我基本上要问的是,是否存在任何安全方式(用户无法解决问题)在每次测验之前使用AJAX从服务器获取答案并使用jQuery告诉用户之后每一个问题,如果他们做对了吗?

2 个答案:

答案 0 :(得分:1)

进行此类测验的最佳做法是在用户回答完所有问题后显示答案。因为用户可能想要修改他/她的答案...所以我建议您通过ajax获取问题并通过ajax检查用户给出的答案以及数据库中的答案来显示最终分数。

答案 1 :(得分:1)

简短的回答是否定的。 一旦您以一种格式将答案发送给客户端,您可以使用该格式确定用户是否输入了正确的答案,用户也可以在回答问题之前解密答案。

安全地完成此操作的唯一方法是在客户端站点上没有答案。因此,您需要从服务器获取答案的正确性。我建议寻找加快服务器验证过程的方法。例如,通过将答案存储在会话中。