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


Good way to build a secure quiz in PHP and Ajax

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

因此,让我们以数学测验为例。我想要的是,每次用户回答问题时,我希望它说答案是对还是错,但是我无法解决如何做的是,安全地从服务器接收答案,以便用户无法阅读它们(例如不是纯文本)

我想到了一种方法,以一种脚本或其他东西不能用于作弊的方式获得问题。为此,我将使页面请求来自服务器的问题,并将返回一堆图像URL(使用PHP创建),以便一切都很好并且解决了。

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

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

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

所以我基本上要问的是,是否有任何安全的方法(用户无法计算出答案)在每次测验之前使用 AJAX 从服务器获取答案,并使用 jQuery 在每个问题后告诉用户他们是否正确?

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

简短的回答是否定的。以可用于确定用户是否输入正确答案的格式将答案发送给客户端后,用户还可以在回答问题之前解密答案。

可以

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