77 lines
5.6 KiB
Markdown
77 lines
5.6 KiB
Markdown
---
|
||
name: security-guidelines
|
||
description: セキュアな開発・運用のための実装指針、機密情報管理、通信の確保、入力値検証、依存ライブラリ管理のガイドラインを定義する。セキュリティ実装時、認証・認可実装時、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接続文字列など**機密性の高い内部情報**を含めていない
|
||
- [ ] ログファイルが、アクセス制限を設けた**安全な場所**に保存されている
|
||
- [ ] デバッグ機能やバックドアとして利用可能なコードを**本番環境から完全に削除**または無効化している
|