README、ドキュメントを更新
This commit is contained in:
@@ -8,9 +8,9 @@ Super Homework Managerは、学生の課題管理を支援するWebアプリケ
|
||||
|
||||
| 項目 | 技術 |
|
||||
|------|------|
|
||||
| 言語 | Go |
|
||||
| 言語 | Go 1.24+ |
|
||||
| Webフレームワーク | Gin |
|
||||
| データベース | SQLite (GORM with Pure Go driver - glebarez/sqlite) |
|
||||
| データベース | SQLite / MySQL / PostgreSQL (GORM、Pure Go SQLiteドライバー使用) |
|
||||
| セッション管理 | gin-contrib/sessions (Cookie store) |
|
||||
| テンプレートエンジン | Go html/template |
|
||||
| コンテナ | Docker対応 |
|
||||
@@ -27,7 +27,8 @@ homework-manager/
|
||||
│ ├── middleware/ # ミドルウェア
|
||||
│ ├── models/ # データモデル
|
||||
│ ├── repository/ # データアクセス層
|
||||
│ └── service/ # ビジネスロジック
|
||||
│ ├── service/ # ビジネスロジック
|
||||
│ └── validation/ # 入力バリデーション
|
||||
├── web/
|
||||
│ ├── static/ # 静的ファイル (CSS, JS)
|
||||
│ └── templates/ # HTMLテンプレート
|
||||
@@ -50,6 +51,8 @@ homework-manager/
|
||||
| PasswordHash | string | パスワードハッシュ | Not Null |
|
||||
| Name | string | 表示名 | Not Null |
|
||||
| Role | string | 権限 (`user` or `admin`) | Default: `user` |
|
||||
| TOTPSecret | string | TOTP秘密鍵 | - |
|
||||
| TOTPEnabled | bool | 2FA有効フラグ | Default: false |
|
||||
| CreatedAt | time.Time | 作成日時 | 自動設定 |
|
||||
| UpdatedAt | time.Time | 更新日時 | 自動更新 |
|
||||
| DeletedAt | gorm.DeletedAt | 論理削除日時 | ソフトデリート |
|
||||
@@ -145,6 +148,7 @@ REST API認証用のAPIキーを管理するモデル。
|
||||
- **パスワード要件**: 8文字以上
|
||||
- **パスワードハッシュ**: bcryptを使用
|
||||
- **CSRF対策**: 全フォームでのトークン検証
|
||||
- **2段階認証 (TOTP)**: プロフィール画面からGoogle Authenticator等で設定可能。有効化後はログイン時にワンタイムパスワードの入力が必要
|
||||
|
||||
### 3.2 API認証
|
||||
|
||||
@@ -158,6 +162,7 @@ REST API認証用のAPIキーを管理するモデル。
|
||||
|--------|------|
|
||||
| `user` | 自分の課題のCRUD操作、プロフィール管理 |
|
||||
| `admin` | 全ユーザー管理、APIキー管理、ユーザー権限の変更 |
|
||||
|
||||
※ 最初に登録されたユーザーには自動的に `admin` 権限が付与されます。2人目以降は `user` として登録されます。
|
||||
|
||||
---
|
||||
@@ -169,8 +174,9 @@ REST API認証用のAPIキーを管理するモデル。
|
||||
| 機能 | 説明 |
|
||||
|------|------|
|
||||
| 新規登録 | メールアドレス、パスワード、名前で登録 |
|
||||
| ログイン | メールアドレスとパスワードでログイン |
|
||||
| ログイン | メールアドレスとパスワードでログイン。2FA有効時は続けてTOTPコードを入力 |
|
||||
| ログアウト | セッションをクリアしてログアウト |
|
||||
| CAPTCHA | ログイン・登録フォームへのbot対策(画像認証またはCloudflare Turnstile) |
|
||||
|
||||
### 4.2 課題管理機能
|
||||
|
||||
@@ -233,7 +239,9 @@ REST API認証用のAPIキーを管理するモデル。
|
||||
| プロフィール表示 | ユーザー情報を表示 |
|
||||
| プロフィール更新 | 表示名を変更 |
|
||||
| パスワード変更 | 現在のパスワードを確認後、新しいパスワードに変更 |
|
||||
| 通知設定 | Telegram通知の有効化とトークン設定 |
|
||||
| 通知設定 | Telegram通知の有効化とChat ID設定 |
|
||||
| 2FA設定 | TOTPアプリ(Google Authenticator等)でQRコードをスキャンし2FAを有効化 |
|
||||
| 2FA無効化 | 有効中の2FAを無効化 |
|
||||
|
||||
### 4.6 管理者機能
|
||||
|
||||
@@ -277,7 +285,14 @@ rate_limit_requests = 100
|
||||
rate_limit_window = 60
|
||||
|
||||
[notification]
|
||||
telegram_bot_token = your-telegram-bot-token
|
||||
telegram_bot_token = your-telegram-bot-token
|
||||
|
||||
[captcha]
|
||||
enabled = false
|
||||
type = image
|
||||
# type = turnstile の場合は以下も設定
|
||||
# turnstile_site_key = your-site-key
|
||||
# turnstile_secret_key = your-secret-key
|
||||
```
|
||||
|
||||
### 5.2 設定項目
|
||||
@@ -286,16 +301,26 @@ rate_limit_window = 60
|
||||
|------------|------|------|--------------|
|
||||
| `server` | `port` | サーバーポート | `8080` |
|
||||
| `server` | `debug` | デバッグモード | `true` |
|
||||
| `database` | `driver` | DBドライバー (sqlite, mysql, postgres) | `sqlite` |
|
||||
| `database` | `driver` | DBドライバー (`sqlite`, `mysql`, `postgres`) | `sqlite` |
|
||||
| `database` | `path` | SQLiteファイルパス | `homework.db` |
|
||||
| `session` | `secret` | セッション暗号化キー | (必須) |
|
||||
| `database` | `host` | DBホスト (MySQL/PostgreSQL) | `localhost` |
|
||||
| `database` | `port` | DBポート (MySQL/PostgreSQL) | `3306` |
|
||||
| `database` | `user` | DBユーザー (MySQL/PostgreSQL) | `root` |
|
||||
| `database` | `password` | DBパスワード (MySQL/PostgreSQL) | - |
|
||||
| `database` | `name` | DB名 (MySQL/PostgreSQL) | `homework_manager` |
|
||||
| `session` | `secret` | セッション暗号化キー | **(必須)** |
|
||||
| `auth` | `allow_registration` | 新規登録許可 | `true` |
|
||||
| `security` | `https` | HTTPS設定(Secure Cookie) | `false` |
|
||||
| `security` | `csrf_secret` | CSRFトークン秘密鍵 | (必須) |
|
||||
| `security` | `https` | HTTPS設定 (Secure Cookie) | `false` |
|
||||
| `security` | `csrf_secret` | CSRFトークン秘密鍵 | **(必須)** |
|
||||
| `security` | `rate_limit_enabled` | レート制限有効化 | `true` |
|
||||
| `security` | `rate_limit_requests` | 期間あたりの最大リクエスト数 | `100` |
|
||||
| `security` | `rate_limit_window` | 期間(秒) | `60` |
|
||||
| `security` | `trusted_proxies` | 信頼するプロキシ | - |
|
||||
| `notification` | `telegram_bot_token` | Telegram Bot Token | - |
|
||||
| `captcha` | `enabled` | CAPTCHA有効化 | `false` |
|
||||
| `captcha` | `type` | CAPTCHAタイプ (`image` or `turnstile`) | `image` |
|
||||
| `captcha` | `turnstile_site_key` | Cloudflare Turnstile サイトキー | - |
|
||||
| `captcha` | `turnstile_secret_key` | Cloudflare Turnstile シークレットキー | - |
|
||||
|
||||
### 5.3 環境変数
|
||||
|
||||
@@ -306,13 +331,22 @@ rate_limit_window = 60
|
||||
| `PORT` | サーバーポート |
|
||||
| `DATABASE_DRIVER` | データベースドライバー |
|
||||
| `DATABASE_PATH` | SQLiteデータベースファイルパス |
|
||||
| `DATABASE_HOST` | DBホスト |
|
||||
| `DATABASE_PORT` | DBポート |
|
||||
| `DATABASE_USER` | DBユーザー |
|
||||
| `DATABASE_PASSWORD` | DBパスワード |
|
||||
| `DATABASE_NAME` | DB名 |
|
||||
| `SESSION_SECRET` | セッション暗号化キー |
|
||||
| `CSRF_SECRET` | CSRFトークン秘密鍵 |
|
||||
| `GIN_MODE` | `release` でリリースモード(debug=false) |
|
||||
| `ALLOW_REGISTRATION` | 新規登録許可 (true/false) |
|
||||
| `HTTPS` | HTTPSモード (true/false) |
|
||||
| `TRUSTED_PROXIES` | 信頼するプロキシのリスト |
|
||||
| `GIN_MODE` | `release` でリリースモード |
|
||||
| `ALLOW_REGISTRATION` | 新規登録許可 (`true`/`false`) |
|
||||
| `HTTPS` | HTTPSモード (`true`/`false`) |
|
||||
| `TRUSTED_PROXIES` | 信頼するプロキシ |
|
||||
| `TELEGRAM_BOT_TOKEN` | Telegram Bot Token |
|
||||
| `CAPTCHA_ENABLED` | CAPTCHA有効化 (`true`/`false`) |
|
||||
| `CAPTCHA_TYPE` | CAPTCHAタイプ (`image`/`turnstile`) |
|
||||
| `TURNSTILE_SITE_KEY` | Cloudflare Turnstile サイトキー |
|
||||
| `TURNSTILE_SECRET_KEY` | Cloudflare Turnstile シークレットキー |
|
||||
|
||||
### 5.4 設定の優先順位
|
||||
|
||||
@@ -327,13 +361,16 @@ rate_limit_window = 60
|
||||
### 6.1 実装済みセキュリティ機能
|
||||
|
||||
- **パスワードハッシュ化**: bcryptによるソルト付きハッシュ
|
||||
- **2段階認証 (TOTP)**: RFC 6238準拠のTOTPによる2FA
|
||||
- **CAPTCHA**: ログイン・登録時のbot対策(画像認証またはCloudflare Turnstile)
|
||||
- **セッションセキュリティ**: HttpOnly Cookie
|
||||
- **入力バリデーション**: 各ハンドラで基本的な入力検証
|
||||
- **CSFR対策**: Double Submit Cookieパターンまたは同期トークンによるCSRF保護
|
||||
- **CSRF対策**: Double Submit Cookieパターンによる全フォーム保護
|
||||
- **レート制限**: IPベースのリクエスト制限によるDoS対策
|
||||
- **論理削除**: データの完全削除を防ぐソフトデリート
|
||||
- **権限チェック**: ミドルウェアによるロールベースアクセス制御
|
||||
- **Secure Cookie**: HTTPS設定時のSecure属性付与
|
||||
- **セキュリティヘッダー**: X-Content-Type-Options, X-Frame-Options等の設定
|
||||
|
||||
### 6.2 推奨される本番環境設定
|
||||
|
||||
@@ -341,6 +378,7 @@ rate_limit_window = 60
|
||||
- HTTPSを有効化し、`HTTPS=true` を設定
|
||||
- `GIN_MODE=release` を設定
|
||||
- 必要に応じて `TRUSTED_PROXIES` を設定
|
||||
- `CAPTCHA_ENABLED=true` を設定してbot対策を強化
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user