2011-10-06 10 views
3

私はユーザーからの入力を収集するために使用している基本的なYii CActiveFormを持っています。これはデフォルトのYii ActiveRecordモデル[/編集]を介してデータベースに挿入されます。他の人と同様に、賢明なユーザーがこれらのフィールドの1つを介してデータベースを削除しないようにする必要があります。Yii CActiveFormは自動的にユーザー入力をサニタイズしますか?

質問:Yii CActiveFormは悪意のあるものを実行する前に入力を自動的にサニタイズしますか?私はこれに関する文書を見つけることができません。私はそれに時間を費やす必要があるか、それともすでに世話をしているかわからない。

ありがとうございます!

答えて

6

"CActiveForm"と言うときは、Yiiで生成されたモデルとコントローラを使用することを意味します。 CActiveFormは自動的にサニタイズを行いませんが、Yiiがデフォルトで使用するActiveRecordメソッドを使用すると、通常は各フィールドのデータ型に基づいてPDOバインディングが実行されます。 createCommand()やその他のメソッドを使用して独自のクエリを作成する場合は、define your own bindingsにする必要があります。

あなたは、あなたがturn on logging、例えば、DBコマンドでファイルを生成components-であなたの設定ファイルに以下を追加することができます何が起こっているのか確認したい場合は

>配列ログイン:

'components'=>array(
'log'=>array(
    'class'=>'CLogRouter', 
    'routes'=>array( 
     array(
     'class'=>'CFileLogRoute', 
     'levels'=>'trace, info', 
     'categories'=>'system.db.*', 
     'logFile'=>'db.log', 
    ), 
    ... 

をし、更新ステートメントがパラメータ化されているとわかる場合は、PDO bindingsを使用していることを確認することができます。 (デフォルトでは、ログファイルは "ランタイム"ディレクトリに保存され、トレースすることができます。ウェブページの下部またはCWebLogRouteでFireBugに表示することもできますが、ページがリダイレクトされます)。

+0

からこれらanswareを取得

私はこれをupvoteすることは許されないんだけど、これは私が必要なだけの答えです。私はデフォルトのActiveRecordモデルを使用しているので、これをカバーする必要がありますが、確かにログをチェックアウトします。ありがとう! – Jack

3

CActiveFormはで自動的にはありませんユーザの入力を衛生的に行います。

クロスサイトスクリプティングのセキュリティ(XSS):

のYiiガイドポストそれがセキュリティ機能ですについて:要約すると

http://www.yiiframework.com/doc/guide/1.1/en/topics.security

とは言う、いくつかは、Yiiのセキュリティについての詳細です上記のリンクを使用すると、のアクションが発生する前にCHtmlPurifierフィルタでユーザー入力をサニタイズできるようになりますが、デフォルトの動作ではありません

Yiiには、Cookieを検証してクロスサイトリクエストの偽造を防止するための機能もあります(リンクにも記載されています)。

データベースセキュリティ:あなたはYiiのの標準のデータ・アクセス(CActiveRecordのような)オブジェクトとMySQLを使用している場合、データベースをドロップするユーザー入力についてのご心配については

PDO bindingsは1次に対する予防すべきデータを保存するために使用SQLインジェクション攻撃。

関連する問題