安全なWebアプリ開発の鉄則2006を参考にした。
これを元に実装検討、テストケースを作るといいかもしれない。
チェックリスト
| 観点 | 結果(○か×) | 備考 |
| 画面設計 | ||
|---|---|---|
| 新たにウィンドウを開かない | 開く場合はそのさきにリンクをつけないなど対応を | |
| Webブラウザのデフォルト設定で動作すること | ||
| フレームを使用しない | ||
| アドレスバーを隠さない | SSLが使われているか確認できなくなるし、違うドメインに飛ばされても気がつかない | |
| エラーページにスタックトレース等を表示しない | ||
| エラーページにファイルパスを表示しない | ||
| ドメイン名 | ||
| システムが使用するURLにおいてドメイン名は1つとする | ドメインが変わるとユーザは不安になる | |
| SSL | ||
| 暗号化なしに送受信してはならない情報を明確に | ||
| 入力欄のある画面をhttps:// とする | ||
| サーバ証明書は警告の出ないものを | ||
| SSL2.0を使用しない | ||
| 暗号アルゴリズムにはCRYPTREC電子政府推奨暗号を用いる | ||
| セッションIDが暗号化されない通信路を流れないようにする | ||
| Cache | ||
| Cacheを禁止するようにする | ||
| CSRF対策(参考サイト) | ||
| 特定副作用を持つ画面はPOSTメソッドによるアクセスに限定 | ||
| 特定副作用を持つ画面に遷移する前の画面には秘密情報をhidden… | ||
| XSS対策 | ||
| HTMLの出力は直接プリントしない | ||
| HTMLタグを含む入力を認める機能を設けない | ||
| SQLインジェクション対策 | ||
| SQL呼び出しをするコードは一か所にまとめて抽象化すること | ||
| SQL文を直接組み立てることをせず、Prepared Statementを使用すること | ||
| セッション | ||
| ログイン中のユーザの特定は、セッションIDにより行うこと | ||
| ログインが成功する前の段階でセッションIDを発行しない | Session Fixation脆弱性を防止する | |
| セッションIDは、cookieまたは、POSTアクセスのhiddenパラメータにのみ格納すること | ||
| セッションIDはログインする都度、乱数により生成する | ||
| セッションIDは80ビット以上とする | ||
| ログアウト機能を設け、ログアウト機能が呼び出されたらセッションを破棄すること | ||
| 一定時間操作がなかったときに、セッションを破棄する(自動ログアウト)こと | ||
| リダイレクタ | ||
| パラメータで指定されたURLへのリダイレクト機能を設けない | ||
| パラメータ | ||
| セッションID以外の値を格納するcookieを発行しな | ||
| URLパラメータに秘密情報を含めない | ||
| パラメータにファイル名(パス名)を一切含めない | ||
| 画面で設定されるパラメタ(hiddenも)はサーバ側で必ずチェックする | ||
| 実装 | ||
| シェル呼び出しを使用しない | ||
| 外部コマンド呼び出しを使用しない | ||
| C言語等のバッファオーバフロー系の脆弱性が所持得る言語を使用しない | ||
| eval()など指定された文字列を言語として実行する機能を使用しない | ||
| 暗号を使用する場合は、暗号アルゴリズムにCRYPTRECの電子政府推奨暗号のみを用いること | ||
| 乱数を用いる場合は、暗号学的に安全な擬似乱数生成系により乱数を生成する | ||
| パスワードは8文字以上設定するように作る | ||
| 実装用部品の選択(略) | ||
| 一時ファイルは速やかに削除する | ||
| 一時ファイル作成を公開ディレクトリで行わない | ||
| 本番用ソースコードに実装コメントを表示しない | ||
| Javascriptの自動生成は行わない | ||