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インジェクションは、Webセキュリティにとって重要な問題です。SQLインジェクションについてこのサイトに目を通すと、文字列をサニタイズする必要がある理由がわかります。

SQLインジェクション

于 2012-05-30T11:16:24.700 に答える