IPA「安全なウェブサイトの作り方 改訂第7版」対応一覧表
最終更新日: 2020年6月12日
R8 | R9
外部のセキュリティツールを利用して Wagby でビルドしたアプリケーションを診断する場合、警告が生じた場合でも誤検知の可能性があります。ジャスミンソフトでもツールを用いてチェックしておりますが、誤検知のケースがあり、個別判断の上で問題なしとしています。
そのため疑義がある場合はWagbyパートナーへお問い合わせください。検証結果についてメーカーの見解をコメントさせていただきます。
セキュリティ実装対応表
脆弱性の種類
対策の性質
項目
対応バージョン
備考
SQLインジェクション
根本的解決
SQL文の組み立ては全てプレースホルダで実装する。
R7/R8
根本的解決
SQL文の構成を文字列連結により行う場合は、アプリケーションの変数をSQL文のリテラルとして正しく構成する。
R7/R8
根本的解決
ウェブアプリケーションに渡されるパラメータにSQL文を直接指定しない。
R7/R8
保険的対策
エラーメッセージをそのままブラウザに表示しない。
R7/R8
保険的対策
データベースアカウントに適切な権限を与える。
-
RDBインストール後、お客様にてデータベースアカウントを用意する。その際、同アカウントしか利用できない論理データベースを作成することで対応。
OSコマンド・インジェクション
根本的解決
シェルを起動できる言語機能の利用を避ける。
-
Wagbyは「ジョブスケジュール」機能で、任意のコマンドを実行できる。このジョブスケジュールはシステム管理者が設定する。よって利用者が任意のOSコマンドを実行できることはない。システム管理者は任意のコマンドを設定可能だが、これは管理上、必要だという場合には実行できるべきというポリシーに基づいている。
保険的対策
シェルを起動できる言語機能を利用する場合は、その引数を構成する全ての変数に対してチェックを行い、あらかじめ許可した処理のみを実行する。
-
(同上)
パス名パラメータの未チェック/ディレクトリ・トラバーサル
根本的解決
外部からのパラメータでウェブサーバ内のファイル名を直接指定する実装を避ける。
R7/R8
根本的解決
ファイルを開く際は、固定のディレクトリを指定し、かつファイル名にディレクトリ名が含まれないようにする。
R7/R8
保険的対策
Webサーバ内のファイルへのアクセス権限の設定を正しく管理する。
-
Webサーバへのアクセス権の設定はWagbyの管理対象範囲外。インストール作業時に、お客様のサーバ管理ポリシーに基づいて設定を行うこと。
保険的対策
ファイル名のチェックを行う。
R7/R8
お客様の運用ポリシーで、ファイル名入力チェックルールを指定することができる。
セッション管理の不備
根本的解決
セッションIDを推測が困難なものにする。
R7/R8
根本的解決
セッションIDをURLパラメータに格納しない。
R7/R8
根本的解決
HTTPS通信で利用するCookieにはsecure属性を加える。
R7/R8
secure 属性の付与は https 通信の管理を行う Web サーバー側で設定する。Wagby アプリケーションは http 環境でも利用する可能性があるため、一律 secure 属性を付与することは行なっていない。
根本的解決
ログイン成功後に、新しくセッションを開始する。
R7/R8
根本的解決
ログイン成功後に、既存のセッションIDとは別に秘密情報を発行し、ページの遷移ごとにその値を確認する。
R7/R8
保険的対策
セッションIDを固定値にしない。
R7/R8
保険的対策
セッションIDをCookieにセットする場合、有効期限の設定に注意する。
R7/R8
クロスサイト・スクリプティング
根本的解決
ウェブページに出力する全ての要素に対して、エスケープ処理を施す。
R7/R8
根本的解決
URLを出力するときは、「http://」や 「https://」で始まるURLのみを許可する。
R7/R8
Wagby では mailto, file も許可している。
根本的解決
<script>...</script> 要素の内容を動的に生成しない。
-
必要に応じて自動生成される。ただし生成するコードの内容はメーカーにて把握しており、セキュリティ攻撃に関わるようなコード生成は行っていない。
根本的解決
スタイルシートを任意のサイトから取り込めるようにしない。
R7/R8
保険的対策
入力値の内容チェックを行う。
R7/R8
根本的解決
入力されたHTMLテキストから構文解析木を作成し、スクリプトを含まない必要な要素のみを抽出する。
R7/R8
リッチテキストエリアにて本機能を適用。
保険的対策
入力されたHTMLテキストから、スクリプトに該当する文字列を排除する。
R7/R8
根本的解決
HTTPレスポンスヘッダのContent-Typeフィールドに文字コード(charset)の指定を行う。
R7/R8
保険的対策
Cookie情報の漏えい対策として、発行するCookieにHttpOnly属性を加え、TRACEメソッドを無効化する。
R7/R8
保険的対策
クロスサイト・スクリプティングの潜在的な脆弱性対策として有効なブラウザの機能を有効にするレスポンスヘッダを返す。
R7/R8
CSRF(クロスサイト・リクエスト・フォージェリ)
根本的解決
処理を実行するページを POST メソッドでアクセスするようにし、その「hidden パラメータ」に秘密情報が挿入されるよう、前のページを自動生成して、実行ページではその値が正しい場合のみ処理を実行する。
R7/R8
根本的解決
処理を実行する直前のページで再度パスワードの入力を求め、実行ページでは、再度入力されたパスワードが正しい場合のみ処理を実行する。
-
Wagbyでは本機能を自動生成しないが、カスタマイズすることで対応できる。
根本的解決
Refererが正しいリンク元かを確認し、正しい場合のみ処理を実行する。
-
hiddenパラメータでの対策を行っているため、必ずしも必要ではない。必要であれば開発者がカスタマイズで対応できる。
保険的対策
重要な操作を行った際に、その旨を登録済みのメールアドレスに自動送信する。
R7/R8
Wagbyのメール送信機能を利用することで対応可能。
HTTPヘッダ・インジェクション
根本的解決
ヘッダの出力を直接行わず、ウェブアプリケーションの実行環境や言語に用意されているヘッダ出力用APIを使用する。
R7/R8
根本的解決
改行コードを適切に処理するヘッダ出力用APIを利用できない場合は、改行を許可しないよう、開発者自身で適切な処理を実装する。
R7/R8
保険的対策
外部からの入力の全てについて、改行コードを削除する。
R7/R8
WagbyではHTTPヘッダを外部から入力することはできないようになっている。
メールヘッダ・インジェクション
根本的解決
メールヘッダを固定値にして、外部からの入力はすべてメール本文に出力する。
-
メールヘッダは固定ではないが、メール送信用APIを利用し、かつ、Wagby側でも改行を削除するようにしている。
根本的解決
ウェブアプリケーションの実行環境や言語に用意されているメール送信用APIを使用する。
R7/R8
根本的解決
HTMLで宛先を指定しない。
-
メールテンプレート機能により、しかるべき権限をもった管理者によって宛先を指定することができる。よって本件は運用でカバーするという方針で対応する。
保険的対策
外部からの入力の全てについて、改行コードを削除する。
R7/R8
クリックジャッキング
根本的解決
HTTPレスポンスヘッダに、X-Frame-Optionsヘッダフィールドを出力し、他ドメインのサイトからのframe要素やiframe要素による読み込みを制限する。
R7/R8
根本的解決
処理を実行する直前のページで再度パスワードの入力を求め、実行ページでは、再度入力されたパスワードが正しい場合のみ処理を実行する。
-
Wagbyでは本機能を自動生成しないが、カスタマイズすることで対応できる。
保険的対策
重要な処理は、一連の操作をマウスのみで実行できないようにする。
-
Wagbyでは本機能を自動生成しないが、カスタマイズすることで対応できる。
バッファオーバーフロー
根本的解決
直接メモリにアクセスできない言語で記述する。
R7/R8
Wagbyは、すべてJavaベースである。
根本的解決
直接メモリにアクセスできる言語で記述する部分を最小限にする。
R7/R8
(同上)
保険的対策
脆弱性が修正されたバージョンのライブラリを使用する。
R7/R8
Wagbyバージョンアップ時に対応。そのため最新のWagbyへのバージョンアップが対策となる。
アクセス制御や認可制御の欠落
根本的解決
アクセス制御機能による防御措置が必要とされるウェブサイトには、パスワード等の秘密情報の入力を必要とする認証機能を設ける。
R7/R8
Wagbyでは認可されていないコンテンツへのアクセスは最初からできないように実装されている。
根本的解決
認証機能に加えて認可制御の処理を実装し、ログイン中の利用者が他人になりすましてアクセスできないようにする。
R7/R8
外部のセキュリティツールの診断結果について