2012-03-21 20 views
1

こんにちは、私は現在、Jeffrey WayのCodeigniterチュートリアルの2日目にいます。このスクリーンキャストでは、彼はそれは自動SQLインジェクションを防ぐ、エスケープだろう、codeigniterのSQLインジェクションを防ぐための基本的な知識

$sql = "SELECT title, author, contents FROM data 
    WHERE id = ? AND author = ?"; 
    $q= $this-> db-> query($sql, array(1,'jeffrey')); 

下の行にユーザーが「ジェフリー」が可能になっている面白い何かを入力した場合と述べました。

これは、codeigniterがquery()パラメータで独自の検証を行っているためですか?それとも、一般的に値をバインドするのは?一般的にSQLインジェクションを防止しますか?

(SQLインジェクションの私が持っている基本的な理解は、あなたが「ジェフリーを、テーブルの内容をDROP」と入力し、かなりのテーブルを殺し、または他の悪いmysqlのコマンドを実行しますことができるということです)

答えて

0

CodeIgniterはパラメータ化されたクエリの仕方について面白いです。ちょうど昨日、私たちは同様にこのことを議論していましたし、主題に関する有用な知識の多くは、このポストから収集することができます。CodeIgniter PDO driver uses query instead of prepare? Isn't this less secure?

CodeIgniterのドキュメントは、Query Bindingsそれを呼び出し、それについて言うためにこれがあります。

をバインドを使用することの副次的な利点は、値が自動的にエスケープされ、より安全な照会が生成されることです。手動でデータをエスケープする必要はありません。エンジンが自動的にそれを行います。

本質的に、PDO :: query()のラッパーであるため、呼び出しを行う前に適切なエスケープとクォートを提供する入力をフィルタします。

0

CodeIgniterには、あなたが渡す変数をエスケープこれは$ this-> db-> queryメソッドを使用するときに使用します。しかし、あなたがあなたの質問で言及したように、変数をバインドとして渡すときだけです。

CodeIgniterは変数のデータタイプを認識し、それに応じてラップします。つまり、文字列の場合は、ユーザーが悪意のあるものを挿入できないようにするために、SQL内のエスケープされた値の周りに''を置きます。

希望すること

+0

これは実際にCIとは何ですか?なぜ適切なパラメータバインディングを使用しないのですか? – Phil

関連する問題