セキュリティ
プライバシーの主張が約束ではなくアーキテクチャの性質として成り立つように、このサービスが構築されている仕組み。
脅威モデル
本サービスは、保存するあらゆるものより機密性の高いソースコードを扱います。設計上の答えは「決して保持しない」ことです:
- アップロード経路なし。 ファイル内容を受け付けるエンドポイントはありません。解析はユーザータブ内の WebAssembly で実行されます。
- ユーザー入力のサーバー側レンダリングなし。 生成ドキュメントはブラウザ内で組み立てられ、当社のインフラを経由しません。
- Content-Security-Policy にサードパーティオリジンなし。 依存関係が侵害されてもデータを密かに送信できません。送信先が存在しないためです。
- エスケープされたレンダリング。 ファイルパスはユーザー自身のディスク由来で、リポジトリには
<img onerror=…>.mdという名のファイルもあり得ます。ユーザー由来の文字列はすべて DOM 到達前にエスケープされます。
コントロール
default-src 'self'、object-src 'none'、base-uri 'self'、form-action 'none'、frame-ancestors 'none'の Content-Security-Policy。HTTP ヘッダーとメタタグの二重設定で、_headersを無視するホストでも維持されます。X-Content-Type-Options: nosniff、Referrer-Policy: strict-origin-when-cross-origin、Cross-Origin-Opener-Policy: same-origin、カメラ・マイク・位置情報・browsing-topics・interest-cohort を無効化するPermissions-Policy。- すべてのリクエストで Cloudflare が TLS を強制。
- エッジでのレート制限は、IP アドレス自体ではなく IP と自律システム番号のダイジェストを鍵とします。
- CI での依存関係監査。ランタイム依存は2つ(
web-tree-sitter、fflate)と、vendored 解析器が使うzod。 - デプロイされたバンドルが存在しないアセットを参照する、または CSP メタタグが取り除かれた場合に失敗するビルド検証テスト。
ブラウザサポート
機能検出のみで、ユーザーエージェントのスニッフィングはしません。スニッフィングは聞いたことのないブラウザを遮断する原因になります。
| ブラウザ | ティア | 備考 |
|---|---|---|
| Chrome / Edge / Opera | フル | ネイティブフォルダピッカー、フォルダへ保存、共有。 |
| Chromium-based (Brave, Vivaldi, Arc) | フル | 同じエンジン。広告ブロッカーがサポートリンクを隠す場合があります。 |
| Firefox | サポート | ファイル入力ピッカー。ダウンロードとコピーでエクスポート。 |
| Safari 16.4+ | サポート | ファイル入力ピッカー。ダウンロード・コピー・共有。 |
| Samsung Internet / mobile Chrome | サポート | 共有でファイルを AI アプリへ直接送れます。 |
| Anything without WebAssembly | 非サポート | 空白で失敗する代わりに、起動時にアプリが明示します。 |
脆弱性の報告
[email protected] までメールしてください。5営業日以内の確認返信を目指します。
バグバウンティはなく、報酬をお支払いすることもできません。ご希望があれば変更履歴にクレジットし、サービスやユーザーに害を与えない善意の研究を法的に追及しません。
他ユーザーのセッションでテストしないでください。サービスは完全クライアント側なので、ほぼすべてがご自身のビルドに対してローカルでテストできます。