1

スタックオーバーフローでこれを読んだだけで、CIのアクティブレコードを介してSQLインジェクションが可能かどうか疑問に思いました。

私のプロジェクトのほとんどの場所で、ユーザー登録とユーザープロファイルの更新のために、次のようなSQL挿入を行いました。

コントローラー:

$name = $this->input->post('name');
$last_name = $this->input->post('last_name');
$age = $this->input->post('dob');

$user_data = array(
    'name' => $name,
    'last_name' => $last_name,
    'age' => $age
);

$this->user_model->add_user_function($user_data);

モデル:

function add_user_function($data)
{
    $this->db->insert('user_table',$data);
    return;
}

上記のSOリンクの例のように、私のコードはSQLインジェクションに対して脆弱ですか?
私のシステムに害を及ぼす可能性がある場合、具体的な例を挙げていただけますか。また、システムが存在する場合、どのように防ぐことができますか。

4

2 に答える 2

8

あなたのケースのためにCodeIgniterによってすでに提供されている2つの安全機能があります。

  1. ユーザー入力のXSSフィルタリング: 入力クラスには、そのメソッドの2番目のブールパラメーターがあります。これにより、グローバルxssフィルターがオンになっていない場合に、XSSフィルターを介して入力を実行できます。

  2. SQLインジェクションの場合、バインドされたクエリとActive Recordsを使用するのは安全です。フレームワークが脆弱なユーザー入力をエスケープするすべての作業を行うため、SQLインジェクションからあなたを救うことができます。ユーザーによって報告されるアクティブレコードの脆弱性はほとんどありませんが、CodeIgnitorチーム(EllisLabs)による後続のリリースで迅速に修正されます。

于 2012-09-19T07:16:17.653 に答える
1

CodeIgniterは、直接SQLクエリを実行するのではなく、アクティブレコードを使用するときに、引用符と脆弱なスクリプトを大幅に削減します。したがって、アクティブレコードを使用する心配はありません。

mysql_real_escape_stringまた、実行するSQLクエリを生成するときに、内部でいくつかのチェックが行われます。

于 2012-09-19T07:14:44.683 に答える