使用 JSON 提供测验答案的简洁方法

Clean way to provide answer key to quiz with JSON

这更多是关于代码组织和更灵活的方法,可以推广。特别是在我正在构建的 Jeopardy 测验中,以提高我在 AJAX/JSON 中的技能。我想将答案与问题分开。只需在 DevTools 中找到并打开 JSON 即可找到正确答案。我想让它变得更难一些,但不会太难编码或在一两个 JSON 文件之后添加更多层。 (并且不要像散列数据库查询那样矫枉过正,因为它只是一个宠物项目)。

不知道该怎么做... 这是我的 JSON.. { "question": "Town where Jefferson built Monticello", "choices":[ "Richmond", "Raliegh", "Charlottesville" ] }

我对 JSON 中的问题给出了正确答案,但我不确定这是最好的方法...我认为答案键可能更好。

我会创建一个获取问题 ID 和所选答案的端点,返回它是否正确和正确答案,如果错误,则将问题标记为 user/session 中的已回答过程。

这样,即使用户使用 DevTools 或类似工具点击您的 API,效果也与通过 UI.

回答相同

您可以执行此操作(并保持简单)的一种方法是对 JSON 对象进行 base64 编码。

首先,一旦您有了所有问题,请将它们编码为 base64。您可以使用 JavaScript 中的 btoa 函数来执行此操作。但是不要将这行代码放在您的客户端中。

btoa( JSON.stringify({ "question": "Town where Jefferson built Monticello", "choices": [ "Richmond", "Raliegh", "Charlottesville" ] }))

然后,获取该 base64 编码字符串并将其放入您的代码中。

const data = "eyJxdWVzdGlvbiI6IlRvd24gd2hlcmUgSmVmZmVyc29uIGJ1aWx0IE1vbnRpY2VsbG8iLCJjaG9pY2VzIjpbIlJpY2htb25kIiwiUmFsaWVnaCIsIkNoYXJsb3R0ZXN2aWxsZSJdfQ=="

从那里,您可以解码并将其转换回您的代码中的 JSON 对象。

let questions = JSON.parse( atob(data) )

就像你在问题中提到的,这仍然可以是 "hacked"。无论如何,这都不是适当的安全措施。人们可以检查它和 运行 代码以获得问题和答案。然而,乍一看答案并不明显。

为了让它变得更好一点,您可以通过混淆工具 运行 您的 JavaScript。 dataquestions 的变量会被破坏,识别正在解码的内容会有点困难。