使用 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。 data
和 questions
的变量会被破坏,识别正在解码的内容会有点困难。
这更多是关于代码组织和更灵活的方法,可以推广。特别是在我正在构建的 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。 data
和 questions
的变量会被破坏,识别正在解码的内容会有点困难。