提问人:madpixl 提问时间:12/21/2017 更新时间:12/21/2017 访问量:1563
使用 JSON 为测验提供答案密钥的干净方法
Clean way to provide answer key to quiz with JSON
问:
这更多的是关于代码组织和一种可以推广的更流畅的方法。具体来说,它存在于我正在构建的 Jeopardy 测验中,以提高我在 AJAX/JSON 方面的技能。我想把答案与问题分开。只需在 DevTools 中查找并打开 JSON,即可找到正确答案。我想让它更难一点,但不要太难编码或添加超过一两个 JSON 文件的更多层。 (不要像散列数据库查询那样矫枉过正,因为它只是一个宠物项目)。
不知道该怎么做... 这是我的 JSON.. { “question”: “杰斐逊建造蒙蒂塞洛的小镇”, “选择”:[ “里士满”, “Raliegh”, “夏洛茨维尔” ] }
我在 JSON 中的问题得到了正确答案,但我不确定这是最好的方法......我认为 anwser 密钥可能会更好。
答:
我会创建一个端点来获取问题 ID 和所选答案,返回它是否正确和正确答案,以防错误,在此过程中将问题标记为该用户/会话的答案。
这样,即使用户使用 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) )
就像您在问题中提到的,这仍然可以被“黑客入侵”。无论如何,这都不是适当的安全性。人们可以检查它并运行代码以获取问题和答案。然而,乍一看,答案并不明显。
为了让它变得更好一点,你可以通过一个混淆工具运行你的 JavaScript。和 的变量会被破坏,并且很难识别正在解码的内容。data
questions
评论