Skip to content

A secure password generator web application built with Go, featuring customizable password length, character types, and comprehensive security measures including cryptographic randomization.

License

Notifications You must be signed in to change notification settings

okamyuji/PasswordGenerator

Repository files navigation

Password Generator

概要

このPasswordGeneratorは、安全でカスタマイズ可能なパスワードを生成するWebアプリケーションです。ユーザーは、パスワードの長さや含める文字の種類を柔軟に設定できます。

機能

  • パスワード長のカスタマイズ(推奨範囲: 8〜128文字)
  • 以下の文字種の選択が可能:
    • 大文字アルファベット
    • 小文字アルファベット
    • 数字
    • 記号
  • カスタム記号の追加オプション
  • 暗号学的に安全な乱数生成
  • Webインターフェースでのパスワード生成

技術スタック

  • 言語: Go (Golang)
  • ウェブフレームワーク: 標準ライブラリnet/http
  • テスト: Go標準のテスティングフレームワーク
  • 依存性注入: カスタム実装

前提条件

  • Go 1.21以上
  • 以下の開発ツール(推奨)
    • goimports
    • staticcheck
    • golangci-lint
    • typos
    • codespell

インストール

  1. リポジトリをクローン

    git clone https://github.com/okamyuji/PasswordGenerator.git
    cd PasswordGenerator
  2. 依存関係のインストール

    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スクリプトの詳細

lint.sh スクリプトは以下の特徴を持っています:

  • 必要なコマンドの存在をチェック
  • コマンドが見つからない場合にエラーを表示
  • 各ツールの実行結果に応じて終了ステータスを設定
  • goimportsで検出されたエラーは自動修正
  • その他のエラーは手動修正が必要

スクリプト使用上の注意

  • false positiveがある場合:
    • typosについては _typos.toml を編集
    • codespellについては .codespellrc を編集

セキュリティ対策

本アプリケーションは、以下の包括的なセキュリティ対策を実装しています

  1. 暗号学的に安全な乱数生成

    • crypto/randパッケージを使用し、暗号学的に安全な乱数生成を実現
    • 予測不可能で高エントロピーなパスワード生成
  2. クロスサイトスクリプティング(XSS)対策

    • Content Security Policy (CSP)ヘッダーの厳格な設定
    • スクリプトソースを厳密に制限
    • インラインスクリプトの実行を最小限に抑制
    • 外部スクリプトの読み込みを禁止
  3. クロスサイトリクエストフォージェリ(CSRF)対策

    • 暗号学的に安全なCSRFトークンの生成
    • 各リクエストでトークンを検証
    • トークンは環境に応じて動的に生成
    • 本番環境では厳格な検証を実施
  4. レートリミティング

    • リクエスト数を制限し、過剰なリクエストからアプリケーションを保護
    • 1分間100リクエストまでに制限
    • 一定時間内のリクエスト数を監視
  5. 入力バリデーション

    • サーバーサイドでの厳格な入力検証
    • 不正なパス、過大なリクエストサイズを排除
    • パスワード生成パラメータの厳密な検証
  6. セキュリティヘッダー

    • X-Content-Type-Options: MIMEタイプスニッフィングを防止
    • X-Frame-Options: クリックジャッキング対策
    • Strict-Transport-Security: HTTPSへの強制リダイレクト
    • Referrer-Policy: リファラー情報の漏洩を防止
  7. ロギングとモニタリング

    • 構造化ロギングによるリクエスト詳細の記録
    • エラー時の詳細なログ出力
    • 潜在的なセキュリティイベントの追跡
  8. 依存性管理

    • 最新のGoバージョンを使用
    • 定期的な依存ライブラリの更新
    • 既知の脆弱性に対する継続的な監視
  9. 本番環境とdev環境の分離

    • 環境に応じたセキュリティ設定の動的な変更
    • 開発環境と本番環境で異なるセキュリティ戦略
  10. アクセス制御

    • デフォルトで最小権限の原則を適用
    • 不要な機能や情報の公開を防止

推奨される追加セキュリティ対策

  • SSL/TLSの強制

  • 定期的なセキュリティ監査の実施

  • 侵入テストの実施

  • 注意

    • これらの対策は完全なセキュリティを保証するものではありません。常に最新のセキュリティ情報に注意を払い、継続的な改善が必要です。

セキュリティに関する注意

  • パスワード生成には crypto/rand を使用し、暗号学的に安全な乱数を生成
  • 生成されるパスワードはランダム性が高く、予測困難

プロジェクト構造

.
├── cmd
│   └── server
│       ├── main.go          # アプリケーションのエントリーポイント
│       └── main_test.go     # サーバー関連のテスト
├── internal
│   ├── config
│   │   └── password.go      # パスワード設定の定義
│   ├── generator
│   │   └── password.go      # パスワード生成ロジック
│   └── handler
│       └── password.go      # HTTPハンドラー
└── lint.sh                  # コード品質チェックスクリプト

貢献

  1. Issueを確認
  2. フォーク
  3. 機能追加/バグ修正のブランチを作成
  4. テストを追加
  5. コードをプッシュ
  6. プルリクエストを送信

ライセンス

MITライセンス

免責事項

このアプリケーションは教育目的および個人利用を想定しています。重要なシステムのパスワード生成には、専門的なパスワードマネージャーの利用を推奨します。

お問い合わせ

質問や提案があれば、Issueを開いてください。

About

A secure password generator web application built with Go, featuring customizable password length, character types, and comprehensive security measures including cryptographic randomization.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published