GeckoFlag は、お客さま自身のサーバーで動くソフトウェアです。プロジェクトの情報を安心して預けていただけるよう、開発者自身がリリースごとにセキュリティ検査を行い、その内容と結果をこのページで公開しています。
このページは開発者による自己検査の記録です第三者機関による認証や監査ではありません。また、何を検査しているかをあわせて公開していますので、導入の判断材料としてご利用ください。
設計上のセキュリティ対策
GeckoFlag は、以下の対策を標準で組み込んでいます。いずれも設定なしで有効です。
パスワードの保護
パスワードは平文では保存せず、bcrypt でハッシュ化して保存します。パスワード再設定のトークンもハッシュ化して保存し、再設定の申請回数も制限しています。
ログイン試行の制限
ログインの失敗を、アカウント単位と接続元 IP アドレス単位の両方で数え、一定回数を超えると一時的にログインを制限します。総当たり攻撃や、多数のアカウントを狙う攻撃を抑えます。
CSRF 対策
すべてのフォーム送信でトークンを検証し、外部サイトからのなりすまし操作を防ぎます。
XSS 対策
課題・コメント・Wiki・ノートなどのリッチテキストは、HTML Purifier で許可したタグだけを残して保存・表示します。リンクは http・https のみ許可します。AI が生成した文章も、すべて同じ処理を通してから保存します。
SQL インジェクション対策
データベース操作は CakePHP 5 の ORM とプリペアドステートメントを使います。
Host ヘッダーの検証
パスワード再設定・招待・通知のメールに入れるリンクは、リクエストの Host ヘッダーではなく、登録したドメインをもとに作ります。不正な Host ヘッダーでメール内のリンクを外部のアドレスに差し替えることはできません。
ファイルの保管
課題の画像とプロジェクトのファイルは公開フォルダーの外に保管し、閲覧する人がプロジェクトのメンバーかどうかを確認してから配信します。PHP など実行可能な拡張子のファイルは受け付けません。
API キーの暗号化
AI 機能用の Claude API キーは、暗号化してデータベースに保存します。
Claude 連携の API トークン
Claude 連携は初期状態では無効で、管理者が機能とユーザーごとの利用を許可した場合だけ使えます。API トークンはハッシュ値だけを保存し、有効期限を設定できます。パスワードを変更するとトークンは無効になります。API でも画面と同じ権限を確認し、読み取り専用のトークンでは変更できません。
IP アドレス制限
管理者は、アクセスを許可する IP アドレスを限定できます。
インストーラーの閉鎖
セットアップ完了後は、インストーラー画面にアクセスできなくなります。
非公開フォルダーの保護
設定・ログ・ソースコードなどのフォルダーへの直接アクセスを、Apache では標準で拒否します(Nginx の場合は推奨設定を参照)。
更新前の自動バックアップ
ソフトウェア更新の前に、自動でバックアップを作成します。
更新ファイルの署名検証
公式の更新ファイルには、開発者の電子署名(Ed25519)が付いています。更新の前に署名とすべてのファイルの内容を照合し、改ざんされたファイルや公式以外の更新ファイルは適用しません。
画像アップロードの検証
アバター・サムネイル・ロゴなどの画像は、ファイルの中身から形式を判定し、ランダムなファイル名で保存します。画像の保存フォルダーからは画像以外のファイルを配信しません(Apache の場合)。SVG は受け付けません。
セキュリティヘッダー
Content-Security-Policy、X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Permissions-Policy を送信し、クリックジャッキングや外部サイトへの情報の漏れを防ぎます。HTTPS で運用している場合は Strict-Transport-Security も送信し、ブラウザーが常に HTTPS で接続するようにします。
セッションの管理
ログインのたびにセッションを作り直します。権限の変更、アカウントの削除、パスワードの変更は、ログイン中の画面にもすぐ反映されます。メールアドレスとパスワードの変更には、現在のパスワードの入力が必要です。
リリースごとのセキュリティ検査
新しいバージョンを公開する前に、次の検査を行います。検査は本番と同じ構成の検証環境で行い、公開中のサービスやお客さまのサーバーには実施しません。最新版で実施した内容は「最新版の検査結果」に記載しています。
| 区分 | 検査内容 | 使用ツール・基準 | 頻度 |
|---|---|---|---|
| 依存ライブラリ | 使用しているライブラリに既知の脆弱性がないかを確認し、使用ライブラリの一覧(SBOM)を作成 | composer audit、OSV-Scanner、CycloneDX | リリースごと |
| 静的解析 | 入力値が危険な処理に届く経路(XSS・SQL インジェクションなど)をソースコードから検出 | Psalm(taint 解析)、PHPStan(レベル 5)、Semgrep | リリースごと |
| 秘密情報の混入 | パスワードや API キーがソースコードや配布ファイルに含まれていないか | gitleaks | リリースごと |
| 動的スキャン | 管理者と一般ユーザーでログインした状態で、実際に攻撃リクエストを送って反応を確認 | Nuclei | リリースごと |
| 権限の検査 | 参加していないプロジェクトの課題・ファイル・ノートを、URL の ID を書き換えて参照・操作できないか | 自動テスト(PHPUnit)、手動確認 | リリースごと |
| ファイルアップロード | 実行可能ファイル、画像に偽装したファイル、パスを操作する ZIP などが拒否されるか | コードレビュー、手動確認 | リリースごと |
| XSS | 課題本文・コメント・Wiki・AI 生成文に攻撃用の文字列を入力し、スクリプトが実行されないか | コードレビュー、手動確認 | リリースごと |
| サーバー構成別の確認 | Apache・Nginx、および公開フォルダーの置き方ごとに、設定ファイルやログへ直接アクセスできないか | 手動確認 | リリースごと |
| Claude 連携の拡張機能 | 拡張機能が使うライブラリの既知の脆弱性、API トークンの扱い、通信先の制限 | npm audit、gitleaks、コードレビュー | 拡張機能の公開ごと |
| チェックリストによる自己点検 | 認証・セッション・入力検証・エラー処理などを項目ごとに確認 | OWASP ASVS 5.0 レベル 1 を参考、IPA「安全なウェブサイトの作り方」 | メジャーバージョンごと |
| 公式サイト | geckoflag.com の HTTPS 設定とセキュリティヘッダー | SSL Labs、Mozilla Observatory | 月 1 回 |
重大度「高」「中」の問題が見つかった場合は、修正して再検査するまでリリースしません。「低」は内容を確認し、修正するか、影響がない理由を記録します。
依存ライブラリの更新方針
GeckoFlag が使用しているライブラリ(CakePHP など)の既知の脆弱性は、リリースごとに確認します。GeckoFlag に影響する脆弱性が見つかった場合は、次の期間を目安に修正版を公開します。
- 重大度「緊急」「高」:公表から 14 日以内
- 重大度「中」:公表から 30 日以内
- 重大度「低」:次回のリリース(遅くとも 90 日以内)
GeckoFlag の使い方では影響しない脆弱性でも、次回のリリースで修正済みのバージョンに更新します。開発用のライブラリは配布ファイルに含めません。
最新版の検査結果:v1.11.0
v1.10.0 からの変更(Claude 連携、リッチテキストの文字色・背景色・区切り線など)を対象に検査し、あわせて以前のバージョンから含まれていた問題も修正しました。v1.10.0 以前をお使いの場合は、v1.11.0 への更新をおすすめします。
| 検査 | 使用ツール(バージョン) | 検出(高 / 中 / 低) | 対応 |
|---|---|---|---|
| 依存ライブラリ | GitHub Advisory Database、FriendsOfPHP security-advisories(2026-10-28 時点のデータ。89 パッケージ) | 0 / 0 / 0 | 配布ファイルに含まれるライブラリに既知の脆弱性はありません。開発用ライブラリの既知の脆弱性は v1.11.0 で更新して解消しました(開発用ライブラリは配布ファイルに含めません) |
| 静的解析・コードレビュー | Psalm 5.26.1(taint 解析)、PHPStan 2.1.17(レベル 5)、Semgrep 1.182.1、手動のコードレビュー(v1.10.0 からの変更部分:Claude 連携の API とトークン、リッチテキスト、ログインの継続、ソフトウェア更新。あわせて全画面のリンクの出力) | 1 / 1 / 3 | 「高」「中」と「低」2 件を v1.11.0 で修正。残る「低」1 件は利用者本人の操作でのみ起きるもので、影響が限られることを確認。「高」1 件は以前のバージョンから含まれていた問題です |
| 秘密情報の混入 | gitleaks 8.24.2 | 0 / 0 / 0 | ソースコードと配布ファイルの両方を確認。検出 2 件はいずれも誤検知(外部ライブラリ内のサンプル文字列など) |
| 修正の確認 | 検証環境(PHP 8.3、MariaDB 10.11、Apache 2.4、Nginx 1.24、Chromium)での動作確認 | — | 指摘ごとに、修正前の問題が再現しないことを確認 |
| 動的スキャン | Nuclei v3.11.1(テンプレート v10.5.1)。未ログイン・管理者・メンバーで実施 | 0 / 0 / 0 | 問題なし |
| 権限の検査 | PHPUnit 12.5(自動テスト 454 件。前回の内容に加え、Claude 連携の API で、トークンなし・読み取り専用のトークン・許可されていないユーザー・機能が無効の場合に拒否されること、参加していないプロジェクトに届かないことを確認) | 0 / 0 / 0 | 問題なし |
| サーバー構成別の確認 | 手動(Apache 2.4、Nginx 1.24 の公開フォルダーの置き方 2 種類。設定ファイル・ログ・セッション・保存ファイルなど 39 の URL) | 0 / 0 / 1 | 旧バージョンのファイル保存フォルダー(files)への直接アクセスを、Apache でもすべて拒否するよう v1.11.0 で修正。ほかは問題なし |
| チェックリスト | OWASP ASVS 5.0 レベル 1(70 項目) | 対象 56 項目中 50 項目を満たす | 今回は見直しを行っていません(前回 v1.10.0 の結果を引き継ぎ) |
| Claude 連携の拡張機能 | npm audit、gitleaks 8.24.2、mcpb validate、手動のコードレビュー(geckoflag-1.0.0.mcpb) | 0 / 0 / 0 | 配布ファイルに含まれるライブラリに、影響する既知の脆弱性はありません。API トークンの扱いと、通信先の制限(HTTPS のみ・リダイレクトを追わない)を確認 |
これまでのバージョンの検査結果は「過去の検査結果」にまとめています。
検査していない範囲
上記の検査には次の限界があります。導入をご検討の際は、この点もあわせてご確認ください。
- 第三者による検査は受けていません。外部の専門家によるソースコードレビューやペネトレーションテストは、現時点では実施していません。
- お客さまのサーバー環境は検査の対象外です。OS、Web サーバー、PHP、データベースの設定や更新状況によって、安全性は大きく変わります。
- すべてのホスティング環境では確認していません。検査した構成は「最新版の検査結果」に記載したものに限ります。
- 外部サービスは対象外です。AI 機能で利用する Anthropic 社の API、Claude 連携で利用する Claude デスクトップアプリ、メール送信サーバーなどの安全性は、各提供元によります。
- 自動ツールでの未検出について。ツールが検出しない種類の問題(業務ロジックの不備など)は手動検査で補っていますが、すべてを網羅できるわけではありません。
脆弱性を見つけた場合のご報告
GeckoFlag の脆弱性と思われる問題を見つけた場合は、公開の場ではなく、下記の窓口へ直接ご連絡ください。すべての報告に開発者が直接目を通します。
報告窓口:お問い合わせフォームで、お問い合わせ種別「脆弱性報告」を選んでご連絡ください
ご報告いただきたい内容
- 対象のバージョンと、問題のある画面・機能
- 再現手順(可能な範囲で)
- 想定される影響
- ご利用のサーバー環境(PHP、Web サーバーなど)
お願い
- 検証はご自身が管理する環境で行い、他人が運用している GeckoFlag や geckoflag.com への攻撃的な操作は行わないでください。
ご希望の場合は、修正版のセキュリティ情報にご報告者のお名前を謝辞として掲載します。
配布ファイルの SHA-256
ダウンロードしたファイルが公式のものと同一かどうか、次の値と照合して確認できます。
| ファイル | SHA-256 |
|---|---|
| GeckoFlag - 1.11.0.zip | 33354ac588c4cb4de2953c3c26a484953c2bb886f38196ba4bcf4fe629648399 |
| geckoflag-1.0.0.mcpb | 44f2c6dfc9f437856d0680920a327820d757a14116064faa6e46ad8a961d0747 |
確認方法:Windows は PowerShell で Get-FileHash ファイル名 -Algorithm SHA256、macOS・Linux は shasum -a 256 ファイル名 を実行します。
安全にご利用いただくための推奨設定
GeckoFlag の安全性は、設置先のサーバー設定にも左右されます。次の設定をおすすめします。
- アップロードしたらすぐにインストールを完了する:インストールが終わるまでは、URL を知っている人なら誰でもセットアップ画面を開けます。ファイルを設置したら、すぐにインストールを済ませてください。
- HTTPS で運用する:ログイン情報やプロジェクトの内容を暗号化して通信します。多くのレンタルサーバーでは無料の SSL 証明書が使えます。なお、一度 HTTPS で開くと、ブラウザーはその後 1 年間そのアドレスに HTTPS で接続します(v1.10.0 以降)。HTTPS をやめる予定がある場合はご注意ください。
- 公開フォルダー(ドキュメントルート)を webroot にする:設定ファイルやログが Web から見えない位置になります。
- Nginx をお使いの場合は、設定を追加する:Nginx では .htaccess が効きません。別途、非公開フォルダーへのアクセスを拒否し、画像のアップロード先(webroot/img)では PHP を実行しない設定にしてください。設定例はマニュアル(インストール手順)をご覧ください。
- 最新バージョンに更新する:セキュリティ修正は最新版に含めて提供します。更新ファイルは公式サイトから入手し、SHA-256 を確認してください。v1.10.0 以降は、更新の前に署名も自動で確認します。
- PHP とデータベースをサポート中のバージョンに保つ:サポートが終了した PHP には修正が提供されません。
- 管理者アカウントを守る:長く推測されにくいパスワードを使い、管理者権限は必要な人だけに与えてください。
- 社内利用なら IP 制限を使う:「設定」から、アクセスできる IP アドレスを限定できます。
- 定期的にバックアップを取る:データベースとアップロードファイルを、サーバーとは別の場所に保管してください。