Yiiフレームオフィシャルガイドシリーズ51――テーマ:セキュリティ対策(Security)

3156 ワード

1.サイドスクリプト攻撃の防止
サイドスクリプト攻撃(略称 XSS)、すなわちウェブアプリケーションは、ユーザからユーザデータを収集する.攻撃者はしばしば攻撃を受けやすいウェブアプリケーションにJavaScript、VBIScript、ActiveX、HTMLまたはFlashを注入して訪問者の情報を収集する.例えば、良い設計されていないフォーラムシステムは、ユーザーが入力した内容をチェックせずに表示することができる.攻撃者は招待状の内容に悪意のあるJavaScriptコードを注入することができます.このように、他の訪問者がこの招待状を読む時、これらのJavaScriptコードは訪問者のコンピュータで実行できます.
XSS攻撃を防ぐための最も重要な措置の一つは、ユーザーが入力した内容を表示する前に、コンテンツチェックを行うことです.例えば、コンテンツ中のHTMLを転送処理してもいいです.しかし、この方法はいくつかの場合、すべてのHTMLタグを無効にするので、好ましくない.
YiiはHTMLPuriferを集積し、開発者に有用なコンポーネントCHtml Purifierを提供しています.このコンポーネントはHTMLPurifer類をカプセル化しています.有効な審査、安全とホワイトリスト機能によって審査された内容のすべての悪意のあるコードを削除し、フィルタリングされた内容をフィルタリングして基準に合うようにすることができます.
CHtml Purlifierコンポーネントは、widgetまたはfilterとして使用できます.Widgetとして使用すると、CHtml Purifierは、ビューに表示されている内容を安全にフィルタリングすることができます.コードの例は以下の通りです.
<?php $this->beginWidget('CHtmlPurifier'); ?>
//...           ...
<?php $this->endWidget(); ?>
2.駅をまたいで偽造攻撃の防止を要求する
駅をまたいで偽造(CSRFと略称する)攻撃を要求します.つまり攻撃者は、ユーザーのブラウザが悪意のあるウェブサイトにアクセスする際に、信頼されたウェブサイトに攻撃者指定の要求を開始させます.例えば、悪意のあるウェブサイトには写真があります.この写真のsrcアドレスは銀行のウェブサイトを指しています.ユーザーが銀行のウェブサイトにログインした後にこの悪意のあるウェブサイトを訪問したら、ユーザーのブラウザは銀行のウェブサイトに指令を送ります.このコマンドの内容は「攻撃者のアカウントに10,000元を振り込む」かもしれません.スパンアタックは、ユーザーが信頼する特定のウェブサイトを利用し、CSRF攻撃は逆であり、ユーザーがあるウェブサイトの特定のユーザーIDを利用する.
CSRF攻撃を防ぐためには、サーバ上のデータを変更することができないようにデータ検索のみを許可するように要求されたことを覚えておく必要があります.http://bank.example/withdraw?transfer=10000&to=someoneは、フォームデータのソースと実行結果の送信の行方が同じであることを保証するために、サーバによって識別され得る幾つかのランダムな値を含むべきであると要求する.
Yiiは、GETに基づく攻撃の防止を助けるためにCSRF防犯機構を実現した.このメカニズムの核心は、クッキーにランダムデータを設定し、フォームに提出されたPOSTデータの対応する値と比較することである.
デフォルトでは、CSRFは禁止されています.これを有効にすると、アプリケーションの設定を編集できます. のセットの中のCHttpRequest部分です.
コードの例:
return array(
    'components'=>array(
        'request'=>array(
            'enableCsrfValidation'=>true,
        ),
    ),
);
フォームを表示するには、自分でHTMLコードを書かないでください.フォームに自動的に隠し項目を埋め込むことができるので、この隠し項目は検証に必要なランダムデータを保存しています.これらのデータはフォーム提出時にサーバーに送信して検証することができます.
3.Cookie攻撃の防止
攻撃からクッキーを守ることは非常に重要です.session IDは通常Cookieに格納されるためである.攻撃者が有効なセッションIDを盗むと、彼はこのセッションIDに対応するセッション情報を使うことができます.
ここにはいくつかの防犯対策があります.
  • SSLを使用してセキュリティチャネルを生成し、HTTPS接続のみで認証クッキーを転送することができます.このように攻撃者は送信されたクッキーを解読することができない.
  • は、クッキーの期限切れ時間を設定し、すべてのクッキーとseesionトークンに対しても同様にする.攻撃される機会を減らすことができます.
  • は、ユーザのブラウザで任意のコードをトリガすることができるので、サイドコード攻撃を防ぐ.これらのコードは、ユーザのクッキーをリークする可能性がある.
  • は、クッキーに変動があるときにクッキーの内容を検証する.
  • Yiiはcookie検証機構を実現し、cookieが修正されることを防止することができる.cookieの値をHMACチェックすることができます.
    Cookie認証はデフォルトでは無効です.これを有効にすると、アプリケーションの設定を編集できます. のセットの中のCHttpRequest部分です.
    コードの例:
    return array(
        'components'=>array(
            'request'=>array(
                'enableCookieValidation'=>true,
            ),
        ),
    );
    必ずYiiで検証されたクッキーデータを使用します.Yii内蔵のクッキーコンポーネントを使用してクッキー動作を行い、POSTを使用しないでください.
    //       $name cookie 
    $cookie=Yii::app()->request->cookies[$name];
    $value=$cookie->value;
    ......
    //     cookie
    $cookie=new CHttpCookie($name,$value);
    Yii::app()->request->cookies[$name]=$cookie;