2011-08-11 11 views
1

CodeIgnighterのデータベースAPIに依存するhereのようなコードを書くことを試みています。私はforum postを読んでCodeIgnighterのデータベースAPIがSQLインジェクションを完全に阻止しているかどうかを確認しました。私はpeople suggestの多くを知っています。PDO FrameworkをSQLインジェクションを防止する最良の方法として使用しています。私はPDOフレームワークの使い方を知っていますが、準備されたステートメントを使ってモデルでクエリを生成する方法はわかりません。 CodeIgnighterのデータベースAPIを使用してSQLインジェクションを保存していますか、PDOフレームワークを使用する必要がありますか?CodeIgnighterのデータベースライブラリーはSqlインジェクションを防止するのに十分です

答えて

3

あなたがコードの点火器を組み込んだ機能を使用すれば、あなたは大丈夫になります。ここで

は、この多くを説明するのstackoverflowのリンクです: StackOverflow Question,

使用してクエリをparametized、上記のSO問題の例に従うと、あなたはSQLインジェクションから安全になり、ずっとあなたが他にありませんCIベストプラクティスに従った良いコードを作成し、すべての組み込み関数を使用するだけです。

2

CIのライブラリは、mysql_real_escape_string(または好みのドライバが何であれ)と同様にSQLインジェクションに対する防御です。どうしてこれなの?そのDBライブラリはすべての入力でそのライブラリを呼び出すからです。また、すべてのテーブル名とカラム名を適切にエスケープします。さらに、PDOを使用するということは、何とかCIのActive Record構文の書き換えを使用する必要があることを意味します。

つまり、PDOには多くの利点があります。私は、セキュリティは事実上それらの一つだとは思わない。

3

CodeIgniterについてはあまり言いませんが、例としてDoctrineを使用します。データベースからユーザーを取得したいとします。あなたは、クエリに条件を追加することができます。

// Correct usage. $user value will be passed as bound parameter to PDO 
    $query->where('u.username = ?', $user); 

それとも...

// Works fine but should not be used like this and can be exploited if $user was not sanitized/escaped 
    $query->where("u.username = '$user' "); 

同じことがあまりにも平野PDOに適用されます。

答えは:それはあなたを助けることができますが、ドキュメントを読んでガイドラインに従う必要があります。

関連する問題