如何保护JSON响应?

时间:2018-04-14 08:31:44

标签: javascript php jquery json codeigniter

我目前正在开发一个在线考试网络应用程序。学生可以在线参加考试。教师可以添加考试问题,并将为学生检索。我正在使用Codeigniter PHP框架。

对于问题表,我大概是这样的: Questions Table

要检索它,我使用GET方法调用ajax,响应将使用JSON。对于后端,我从该表中选择并使用

返回
json_encode()

这是代码:

客户端

function getQuestions() {
    $.ajax({
        url: "exams/getQuestions",
        method: "GET",
        dataType: "json",
        success: function(data) {
            $("#lblA").html(a[0]);
            console.log(data)
        }
    });
}

控制器

public function getQuestions()
{
    $results = $this->ExamModel->getQuestions();
    //print_r($results);

    echo json_encode($results);
}

模型

  public function getQuestions(){
    $this->db->select("*");
    $this->db->from("question");
    $query = $this->db->get();

    if ($query->num_rows() > 0) return $query->result();
    else return false;    
  }

我得到的回应是: Questions JSON response

正如您所看到的,因为在问题表中我有一个 right_ans 列,它也会显示出来。我认为这是一种安全风险,因为那时学生会知道答案。所以我的问题是如何防止学生知道它?

我有一个想法是在问题表中再创建一个列 ans_d ,并且还有 right_ans 列,但在检索数据时,我没有选择 right_ans 列。我仍然不确定,所以我感谢所有的帮助!

谢谢。

2 个答案:

答案 0 :(得分:1)

只需修改您的select并选择您需要的字段:

$this->db->select("id, question, ans_a, ans_b, ans_c");

在这种情况下,没有人会看到任何其他字段,因为它们未被选中,因此不会传递给客户。

答案 1 :(得分:1)

只需获取除answer:

之外的所有列
  $this->db->select("ans_a,ans_b,ans_c,id,question");