このPasswordGeneratorは、安全でカスタマイズ可能なパスワードを生成するWebアプリケーションです。ユーザーは、パスワードの長さや含める文字の種類を柔軟に設定できます。
- パスワード長のカスタマイズ(推奨範囲: 8〜128文字)
- 以下の文字種の選択が可能:
- 大文字アルファベット
- 小文字アルファベット
- 数字
- 記号
- カスタム記号の追加オプション
- 暗号学的に安全な乱数生成
- Webインターフェースでのパスワード生成
- 言語: Go (Golang)
- ウェブフレームワーク: 標準ライブラリ
net/http
- テスト: Go標準のテスティングフレームワーク
- 依存性注入: カスタム実装
- Go 1.21以上
- 以下の開発ツール(推奨)
- goimports
- staticcheck
- golangci-lint
- typos
- codespell
-
リポジトリをクローン
git clone https://github.com/okamyuji/PasswordGenerator.git cd PasswordGenerator
-
依存関係のインストール
go mod tidy
go run cmd/server/main.go
サーバーは http://localhost:8080
で起動します。
go test ./... --shuffle=on
go test ./internal/generator
go test ./internal/handler
# テスト全体のカバレッジ
go test ./... --shuffle=on -cover
# 詳細なカバレッジレポート
go test ./... --shuffle=on -coverprofile=coverage.out
# HTML形式のカバレッジレポート
go tool cover -html=coverage.out
プロジェクトには lint.sh
スクリプトが含まれており、以下のチェックを実行できます:
# lintスクリプトの実行
sh lint.sh
チェック内容
goimports
: コードのフォーマットと import の整理go vet
: 静的解析staticcheck
: 追加の静的解析golangci-lint
: 包括的なコード品質チェックtypos
: スペルチェックcodespell
: コード内のスペルミスチェック
lint.sh
スクリプトは以下の特徴を持っています:
- 必要なコマンドの存在をチェック
- コマンドが見つからない場合にエラーを表示
- 各ツールの実行結果に応じて終了ステータスを設定
goimports
で検出されたエラーは自動修正- その他のエラーは手動修正が必要
- false positiveがある場合:
typos
については_typos.toml
を編集codespell
については.codespellrc
を編集
本アプリケーションは、以下の包括的なセキュリティ対策を実装しています
-
暗号学的に安全な乱数生成
crypto/rand
パッケージを使用し、暗号学的に安全な乱数生成を実現- 予測不可能で高エントロピーなパスワード生成
-
クロスサイトスクリプティング(XSS)対策
- Content Security Policy (CSP)ヘッダーの厳格な設定
- スクリプトソースを厳密に制限
- インラインスクリプトの実行を最小限に抑制
- 外部スクリプトの読み込みを禁止
-
クロスサイトリクエストフォージェリ(CSRF)対策
- 暗号学的に安全なCSRFトークンの生成
- 各リクエストでトークンを検証
- トークンは環境に応じて動的に生成
- 本番環境では厳格な検証を実施
-
レートリミティング
- リクエスト数を制限し、過剰なリクエストからアプリケーションを保護
- 1分間100リクエストまでに制限
- 一定時間内のリクエスト数を監視
-
入力バリデーション
- サーバーサイドでの厳格な入力検証
- 不正なパス、過大なリクエストサイズを排除
- パスワード生成パラメータの厳密な検証
-
セキュリティヘッダー
- X-Content-Type-Options: MIMEタイプスニッフィングを防止
- X-Frame-Options: クリックジャッキング対策
- Strict-Transport-Security: HTTPSへの強制リダイレクト
- Referrer-Policy: リファラー情報の漏洩を防止
-
ロギングとモニタリング
- 構造化ロギングによるリクエスト詳細の記録
- エラー時の詳細なログ出力
- 潜在的なセキュリティイベントの追跡
-
依存性管理
- 最新のGoバージョンを使用
- 定期的な依存ライブラリの更新
- 既知の脆弱性に対する継続的な監視
-
本番環境とdev環境の分離
- 環境に応じたセキュリティ設定の動的な変更
- 開発環境と本番環境で異なるセキュリティ戦略
-
アクセス制御
- デフォルトで最小権限の原則を適用
- 不要な機能や情報の公開を防止
-
SSL/TLSの強制
-
定期的なセキュリティ監査の実施
-
侵入テストの実施
-
注意
- これらの対策は完全なセキュリティを保証するものではありません。常に最新のセキュリティ情報に注意を払い、継続的な改善が必要です。
- パスワード生成には
crypto/rand
を使用し、暗号学的に安全な乱数を生成 - 生成されるパスワードはランダム性が高く、予測困難
.
├── cmd
│ └── server
│ ├── main.go # アプリケーションのエントリーポイント
│ └── main_test.go # サーバー関連のテスト
├── internal
│ ├── config
│ │ └── password.go # パスワード設定の定義
│ ├── generator
│ │ └── password.go # パスワード生成ロジック
│ └── handler
│ └── password.go # HTTPハンドラー
└── lint.sh # コード品質チェックスクリプト
- Issueを確認
- フォーク
- 機能追加/バグ修正のブランチを作成
- テストを追加
- コードをプッシュ
- プルリクエストを送信
MITライセンス
このアプリケーションは教育目的および個人利用を想定しています。重要なシステムのパスワード生成には、専門的なパスワードマネージャーの利用を推奨します。
質問や提案があれば、Issueを開いてください。