5.6 KiB
5.6 KiB
name, description
| name | description |
|---|---|
| security-guidelines | セキュアな開発・運用のための実装指針、機密情報管理、通信の確保、入力値検証、依存ライブラリ管理のガイドラインを定義する。セキュリティ実装時、認証・認可実装時、API開発時、またはユーザーがセキュリティ、機密情報、暗号化、XSS対策、SQL injection、脆弱性管理に言及した際に使用する。 |
Security Guidelines
概要
このSkillは、開発されるすべてのソフトウェアにおけるセキュリティの基本原則と具体的な実装指針を定義します。機密情報の管理、通信の暗号化、入力値の検証、依存ライブラリの管理など、開発・運用時に考慮すべきセキュリティ要件をカバーし、脆弱性のリスクを最小化することを目的としています。
責任範囲
このSkillは以下の範囲をカバーします:
- 機密情報(APIキー、パスワード、秘密鍵)の安全な管理方法
- HTTPS/SSL/TLSを使用した通信の暗号化
- 入力値の検証とサニタイズ(SQLI、XSS対策)
- 依存ライブラリの脆弱性管理と定期的な更新
- エラー処理とログにおける機密情報の取り扱い
- 開発フェーズごとのセキュリティチェックリスト
データと機密情報の管理
- 機密情報の分離: パスワード、APIキーなどの機密情報は、ソースコードに直接記述せず、環境変数や設定ファイルで管理する
- パスワード保存: パスワードは必ず不可逆なハッシュ化して保存する
- ローカル保存: 端末内の機密情報は、OS提供のセキュアストレージ機能(Keychain/Keystore)を利用する
- ソースコード管理の注意: GitのコミットやGitHubのPRに、設定ファイルや環境変数など機密情報そのものを含めない
通信の確保
- HTTPSの必須化: 外部との通信はすべてHTTPS/SSL/TLSを使用し、暗号化されていないプロトコルは使用しない
- 証明書の検証: サーバー証明書の検証を適切に行い、中間者攻撃を防ぐ
入力値の検証と防御
- 入力値の無信頼: ユーザーや外部からの全ての入力値は信頼せず、形式、長さ、型を厳密に検証する
- サニタイズ: データベース操作前やHTML表示前に、エスケープ処理やサニタイズ(SQLI、XSS対策)を徹底する
依存ライブラリと環境
- 定期的な更新: 使用するすべての外部ライブラリやフレームワークは、定期的に最新バージョンに更新し、既知の脆弱性に対応する
- デバッグ機能の削除: デバッグ用コードや不要な機能は、本番環境から必ず削除または無効化する
エラー処理とログ
- 機密情報の非公開: エラーメッセージやログに、機密性の高い内部情報(接続文字列など)を含めない
- ログの保護: ログは必要な情報のみを記録し、アクセス制限を設けた安全な場所に保存する
セキュリティチェックリスト
ドキュメント作成/計画フェーズ用チェックリスト
- 機密情報の取り扱い方法(保存場所、アクセス権など)を明確に定義した
- 外部APIを利用する場合、利用規約やセキュリティポリシーを確認し、適切なAPIキー管理方法(環境変数など)を決定した
- 外部通信を行う箇所について、すべてHTTPS/SSL/TLSの使用を計画している
- パスワードなど機密性の高いデータを保存する場合、ハッシュ化アルゴリズムの採用を決定した
- 想定される脅威(SQLI、XSSなど)に対する入力値検証・サニタイズの基本方針を定めた
コミット/PRフェーズ用チェックリスト
- コミットやPRに、APIキー、秘密鍵、パスワードなどの機密情報そのものが含まれていないことを確認した
.gitignoreまたは同様の機能で、設定ファイルや環境変数ファイルが誤ってリポジトリに含まれないよう設定されていることを確認した- 不要なデバッグ用コード(
console.log、テスト用認証情報など)が残存していないことを確認した - 依存ライブラリのバージョンアップが含まれる場合、既知のセキュリティ脆弱性がないか確認した
実装フェーズ用チェックリスト
- ユーザー入力や外部からのデータについて、必ず形式、長さ、型の検証とサニタイズ(エスケープ)処理を行っている
- パスワードの保存に、安全な不可逆ハッシュ化を使用している
- 外部との通信がすべてHTTPS/SSL/TLSで行われていることを確認した
- 端末内の機密情報(認証トークンなど)の保存に、OS提供のセキュアストレージ機能を利用している
- 使用している外部ライブラリが最新バージョンであり、セキュリティパッチが適用されていることを確認した
- エラーメッセージやログに、DB接続文字列など機密性の高い内部情報を含めていない
- ログファイルが、アクセス制限を設けた安全な場所に保存されている
- デバッグ機能やバックドアとして利用可能なコードを本番環境から完全に削除または無効化している