我在寻求帮助以实现jquery自动完成功能,有人提到以下代码容易受到sql注入的影响。我是编程新手,所以我不知道如何/为什么。

有人能够详细解释一下,以消除安全风险的具体步骤吗?

谢谢

JS:

$( "#filter" ).autocomplete({
    source: function(request, response) {
        $.ajax({
        url: "http://rickymason.net/blurb/main/search/",
        data: { term: $("#filter").val()},
        dataType: "json",
        type: "POST",
        success: function(data){
           var resp = $.map(data,function(obj){
                return obj.tag;
           });

           response(resp);
        }
    });
},
minLength: 2
});


控制器:

    public function search()
    {
        $term = $this->input->post('term', TRUE);
        $this->thread_model->autocomplete($term);
    }


模型:

    public function autocomplete($term)
    {
        $query = $this->db->query("SELECT tag
            FROM filter_thread ft
            INNER JOIN filter f
            ON ft.filter_id = f.filter_id
            WHERE f.tag LIKE '%".$term."%'
            GROUP BY tag");
        echo json_encode($query->result_array());
    }

最佳答案

您正在查询中使用未转义的$term。恶意用户可以提交诸如' OR 1=1; DROP DATABASE;--之类的字符串-您当然不希望这样做。在将字符串放入查询之前,请使用mysql_real_escape_string()或MySQLi equivalent清理字符串。

关于mysql - 清理AJAX jQuery自动完成脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10805656/

10-13 02:22