0

我正在寻求帮助以实现 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());
    }
4

3 回答 3

2

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

于 2012-05-29T20:15:41.803 回答
1

在查询中使用之前检查用户提交的数据是否有不需要的字符是一种很好的做法。这样你就不会让人在那个领域输入他们想要的任何东西。当您在未经检查的查询中使用任何用户提交的数据时,它可能会使您面临 SQL 注入攻击。

这是一个相当不错的解释:http ://www.cisco.com/web/about/security/intelligence/sql_injection.html

于 2012-05-29T20:12:46.470 回答
0

Sql Injection 是 Web 安全的一个重要问题。请浏览这个关于 sql injection 的网站,然后你就会明白为什么你需要清理字符串。

SQL 注入

于 2012-05-30T11:16:24.700 回答