3

Codeigniter を使用してプロジェクトを作成しました。これは非常にクールで効率的です。

CIには、システムを保護するのに役立つ優れたフォーム検証機能がありますが、ルールを使用する正しい方法を見つけるのに苦労しています.

下記を参照してください

IDそれが整数フィールドであると仮定して、設定できるようにします

$this->form_validation->set_rules("ID","FORM ID","required|trim|integer");

フィールドIDinteger.

しかし、通常のFORMフィールド(テキストエリアまたは通常の入力タイプのテキストフィールド)のルールはどうあるべきか、

要件

  1. HTMLは許可されていません(またはそれらのタグを削除する必要があります)
  2. XSS クリーン
  3. SQL インジェクションの防止

現在、私はやっています

$this->form_validation->set_rules("FIELD_NAME","FIELD_NAME","required|trim|xss_clean|strip_tags");

これはシステムを安全にするのに十分ですか?

4

2 に答える 2

6

Codeigniters 検証ライブラリを使用することは、セキュリティを強化するための最初のステップです。これを使用して、無効な文字 (HTML、潜在的な XSS/SQL 攻撃など) を削除する必要があります。

あなたの要件に従って:

strip_tags- HTML タグを削除します
xss_clean- 潜在的な xss 攻撃文字列を削除します

SQL インジェクション攻撃を防ぐためalpha_numericに、検証ルールのようなものを使用して、英数字のみを許可することで潜在的に危険な文字から保護することもできます。

SQL インジェクションを防ぐもう 1 つの方法は、データベースとの間でデータをやり取りするときに Codeigniters アクティブ レコード ライブラリを使用することです。意図したとおりに Codeigniters アクティブ レコードを使用すると、SQL インジェクション攻撃に使用される可能性のある危険な文字が自動的に削除されます。

方法 1 (無効な文字を削除する) - アクティブなレコード ライブラリの WHERE 関数パラメーターを利用する

$query = $this->db->where('username', $username);
$query = $this->db->get('users');

方法 2 (保護なし) - where ステートメントを直接記述する

$this->db->where('username = '.$username);
$query = $this->db->get('users');

方法 3 (保護なし) - SQL ステートメント全体をクエリ関数に直接書き込む

$this->db->query('SELECT * FROM users WHERE username = '.$username);

アクティブなレコード ライブラリを使用しない場合、codeigniter は文字列をエスケープする (データベースに安全に入力できるようにする) 関数を提供します。

$this->db->e​​scape() この関数は、文字列データのみをエスケープできるようにデータ型を決定します。また、データの前後に一重引用符が自動的に追加されるため、次のことを行う必要はありません。

使用例:

$this->db->query('SELECT * FROM users WHERE username = '.$this->db->escape($username));

参照: http://codeigniter.com/user_guide/database/queries.html

于 2012-11-21T06:27:13.780 に答える
1

もう 1 つの優れた CI セキュリティ機能

フォームから値を取得している場合は、フィールド名の後に TRUE を追加することで XSS クリーンできます。例: 送信されたフォームからの first_name というフィールド

$firstname = $this->input->post( 'first_name', TRUE );
于 2012-11-21T23:07:11.310 に答える