[Security]Web Application Security Checklist

December 11, 2017

最近セキュリティ考慮したシステム設計を経験したので、メモします。

1. ユーザー認証

  • ログイン失敗する際詳しメッセージが出さない
  • 指定回数でログイン失敗したらアカウントロックをかかる
  • アカウントロックをかかった際管理者にメール等で通知
  • パースワードの有効期限を実装
  • パースワード変更するには現在のパースワードが必要
  • 直接パースワードはDBに保存しない

2. 権限制御

  • 直接URLをアクセス許可かどうか検討
  • 各アクションは実行する前に権限をチェックする ボタンの表示、非表示等ではなくロジック実装である。
  • ブラウザの戻るボタンを要注意

3. セッション管理

  • Cookieセンシティブデーターを持たない
  • SessionIdはユニックであり、サーバー側にてアサインするべき
  • SessionIdは推測しにくい
  • SessionIdはできればライフタイムが短く設定するべき
  • ログアウトする際SessionIdは廃棄するべき
  • CookieはHttpOnly,Secure属性設定するべき
  • パーマネントCookieよりセッションCookieを使用したほうが良い

4. バリデーション

  • クライアントからのデータは信頼性がゼロとして必ずサーバーサイドバリデーション実装
  • HTML特殊文字、危険な文字等エスケープするべき

5. クロスサイトスクリプティング

  • 動的な内容を表示する箇所はすべてHTMLエスケープするか確認
  • Query stringのデータは直接表示させない

6. コマンドインジェクション

  • シェルコマンドが直接呼び出す際パラメータエスケープをするべきだ

7. SQLインジェクション

  • SQLを組み立てる際ストリング結合ではなくすべてprepare statementを使用するべき

8. バッファオーバーフロー

  • すべてのリクエストデータは最大値をバリデーションする

9. 暗号化,秘密情報

  • 認証されたアルゴリズムを使用すること
  • 秘密鍵、DB情報等を持っている.envファイルは保護すること

10. エラーハンドリング

  • エラーになった際エラー情報をユーザーに見せないこと

11. ロギング

  • ログには日付、タイプ、詳細情報が出される

12. サーバー設定

  • Debugモードオフする
  • すべてリクエストはHTTPSを介すること
  • Apacheサーバーの場合はApacheチェックリスト参照する

Initializing...