CGI Programming and Web Security
セキュリティの脅威 侵入・破壊 盗聴 改ざん なりすまし 規制
セキュリティの範囲 ネットワーク 外部ネットからのアタック 内部ネットからのアタック マシン WWWサービス HTTPデーモン CGI
セキュリティ図
侵入・破壊 ”Denial-of-service" (DoS) attack ポートスキャン 重要なファイルの持ち出し
盗聴 パスワード、カード番号など プライバシー 内部的なデータ(イントラネット)
改ざん データの改変 ページデータ 金額
なりすまし アクセス元 ID
規制 PICS 例 プロトコル Platform for Internet Content Selection www.w3.org/PICS 例 プロトコル
ネットワークのセキュリティ ファイアーウォール 玄関の鍵
マシンのセキュリティ ファイルのパーミッション FTPサービス IDの管理 スーパーユーザでの作業 sudo http://www.courtesan.com/sudo/
サービスのセキュリティ 古いHTTPサーバ HTTPサーバの実行ユーザ IPアドレスによるアクセス制限
外部ユーザ 不特定多数 有料コンテンツの保護 ユーザのプライバシーの保護
内部ユーザ 特定多数 必要以外の情報を見せない 意外と見落としがち
暗号 SSL ID、個人情報、コンテンツ
電子証明書 CA サーバ証明書 個人証明書
認証 ID、パスワード マシンとは別に管理 他の仕組みとの連携
CGIプログラミング プログラム自身の問題 サーバに関連する問題 ブラウザに関連する問題
プログラム自身の問題 バグ system(), `` 認証 IPアドレス ホスト名、ドメイン名 ID、パスワード ファイルのパーミッション
サーバに関連する問題 他サービスとの連携 RDBMS メール
ブラウザに関連する問題 maxsize なりすまし backボタン
クッキーに関連する問題 容易に見られる マシンの共有 ユーザ入力データの保存 プライバシーの保護 secure フラグ
perl -T “tainted” チェック Insecure dependency in...
Tainted Data とは 汚染されたデータ=取り扱い要注意 %ENV @ARGV ファイルまたは qx{} からのデータ readlink, readdir の戻り値 gcos フィールド
CGIモジュール $CGI::POST_MAX $CGI::DISABLE_UPLOADS CGI::Carp
注意を要する操作 ディスクの読み書き ネットワークのアクセス eval プロセス制御 プログラムの実行
その他の注意事項 PATH IFS CDPATH, ENV, BASH_ENV メタキャラクタ tr/*(){}’\”;\|<>//d tr/A-Za-z0-9 //cd
メールアドレス メールプログラム サブジェクト 宛て先
suEXEC setuid/setgid でのCGI/SSI実行環境 ドキュメンテーション http://www.apache.org/docs/suexec.html
参考文献 W3C Security Resources Perl security JPCERT/CC(コンピュータ緊急対応センター) http://www.w3.org/Security/ Perl security <CPANサイト>/doc/manual/html/pod/perlsec.html JPCERT/CC(コンピュータ緊急対応センター) http://www.jpcert.or.jp/