セキュリティ

QuoteBillがアカウントと書類を守る仕組み:行単位のセキュリティ、ハッシュでのみ保存するキーとリンク、記録が残る管理者の閲覧、電子契約の監査記録の連鎖。

このページで説明すること

このページは、QuoteBillのコードとデータベースがアカウントと書類を守るために実際に行っていることを書いたものです。保証ではなく対策の説明です。欠陥のないサービスはなく、このページは認証でも監査結果でもありません。機能ごとに何をどれだけの期間保存するかは個人情報の取り扱いについてのページに、電子契約の信頼性に関する内容は専用のページにあります。

誰があなたのデータを読めるか

保存した書類と会社の設定は、データベースの行単位のセキュリティで守られています。ブラウザーからは、ログインしている所有者だけが読み取り・変更できます。

AIアプリに発行されたログイン用トークンは、制限ルールによってこれらのテーブルで拒否されます。そのため、接続したAIアプリが保存済みの書類、契約書、ファイルを開くことはできません。QuoteBillのMCPサーバー自体も、公開情報と計算だけを使い、会員のデータは読みません。

訪問記録、日別の合計、リクエスト回数の記録のように、サーバーだけが使うテーブルは、ブラウザーとAIアプリに対して閉じられています。行単位のセキュリティが有効で、読み取りを許可するポリシーや権限はありません。

電子契約のデータは、ブラウザーから問い合わせることのできない非公開のデータベーススキーマにあります。誰が要求しているかを確認する決まったデータベース関数を通してのみ到達できます。契約書は契約書IDと所有者で探すため、他の会員の契約書は、存在しない契約書とまったく同じ応答になります。

設計上、公開されているデータもあります。コミュニティの投稿と公開された記事です。会社のロゴ、印影、署名の画像は、アドレスを知っている人なら開ける場所に保存されるため、機密の画像はアップロードしないでください。

パスワードとログイン

パスワードは、ブラウザーからログインの提供元であるSupabase Authへそのまま送られ、QuoteBillのコードが保存することはありません。Supabase Authがパスワードをどのように保護しているかは、Supabaseの説明をご覧ください。Googleでログインした場合は、GoogleがSupabase Authにあなたが誰かを伝えます。QuoteBillは、次回のログインを早くするために、ログイン方法とメールアドレスだけをブラウザーに記憶します。

電子契約:リンク、コード、セッション

署名リンクには、ランダムな32バイトの秘密の値が含まれます。QuoteBillはそのSHA-256ハッシュだけを保存し、リンクは作成時に一度だけ送信者に表示されます。秘密の値はアドレスの # の後ろに置かれるため、サーバーのリクエスト記録には残らず、ページは読み取った後にアドレスバーから消します。署名者に新しいリンクを作ると、古いリンクはすぐに使えなくなります。

アクセスコードは32種類の記号から選んだ8文字で、ソルト付きのbcryptハッシュとしてのみ保存されます。誤ったコードを5回、10回入力すると15分間リンクがロックされ、15回目でリンクは失効します。

署名者のセッションはランダムな秘密の値で、SHA-256ハッシュだけを保存します。最後の操作から30分、最長2時間続きます。

各操作にはネットワークアドレスごと、署名者ごとの上限があり、アドレスをソルト付きハッシュにして数えます。10分ごとの整理処理が、2時間より古い回数の記録を削除します。

契約が終了すると(完了、辞退、無効化、期限切れ)、リンクは使えなくなり、リンク・コード・セッションのハッシュは遅くとも30日以内に削除されます。

電子契約:監査記録の連鎖

契約書に対するすべての操作(送信、閲覧、同意、署名、辞退、リマインドなど)は、1件の記録として残ります。記録のSHA-256ハッシュは、その記録自身の内容(契約書、連番、記録の種類、行為者、データベースの時計による時刻、ネットワークアドレス、ブラウザーと詳細のハッシュ)と、直前の記録のハッシュを含みます。最初の記録は契約書の参照番号につながります。最後の完了記録のハッシュが、署名確認書に印刷され確認ページに表示される確認書ハッシュです。

署名される契約書の本文は固定され、正規化した形のSHA-256ハッシュである書類の指紋に結び付けられ、データベースがそれを再計算します。データベースのトリガーは、記録、署名、確認用の記録の更新、削除、全消去を拒否します。

確認ページで証拠ファイルを確認できます。ブラウザーが連鎖と署名を自分でたどり、QuoteBillには契約書の参照番号と書類の指紋だけを送ります。

これが示すのは、証拠ファイルが自己矛盾しておらず、QuoteBillが保管する記録と一致していることです。示さないのは、誰が署名したかです。QuoteBillは本人確認をしません。この連鎖に署名する秘密鍵も外部のタイムスタンプサービスもないため、時刻はQuoteBill自身のデータベースの時計によるものです。データベースの管理権限を持つ人は、理論上はトリガーを止めて記録を書き換え、ハッシュを再計算できます。その場合、当事者が持つ写しとは一致しなくなります。だからこそ、各当事者は署名済みの写しを自分で保管してください。

管理者が見られるもの

管理者のページには管理者アカウントが必要です。呼び出しのたびに、データベースが役割とログインセッションがまだ存在することを確認し、AIアプリに発行されたトークンは拒否します。

管理者は、サポートを行うため、悪用を調べるため、または法的義務を果たすために、会員がクラウドに保存した書類を開くことができます。閲覧は読み取り専用で、開くたびに、どの管理者がどの書類をいつ開いたかが、トリガーで変更できないようにした記録に残ります。書類へつながる一覧には、所有者のメールアドレスと名前、書類の名前、番号、取引先、状態、合計が表示され、記録されるのは書類を開く操作だけです。

この画面では電子契約は開けません。報告された契約書については、タイトル、参照番号、状態、報告数、最後の報告理由、所有者のメールアドレスだけが見え、契約書の本文や署名は見えません。管理者は送信済みの契約書を停止できます。

会員の役割や書類数の上限を変えるには理由の記入が必要で、編集できない記録に残ります。役割を変えられるのは最上位の管理者だけです。会員としてログインする機能はQuoteBillにはありません。

データベースを運用する人は、技術的にはそこに保存されたすべてにアクセスできます。上記の対策は、QuoteBill自身の管理者ページの利用を管理し記録するものであり、そうした技術的なアクセスを対象とするものではありません。

APIキーとAIアプリ

APIキーは qbk_ の後にランダムな32文字が続く形式です。QuoteBillはキーのSHA-256ハッシュと、キーを見分けられるように先頭の8文字、名前、権限、日付を保存し、キー自体は作成時に一度だけ表示します。有効なキーは同時に5つまで持て、有効期限は30日、90日、365日から選び、いつでも失効させられます。

キーでは、書類の下書きを作成し、保存済みの書類を簡略化した形で読み取れます(取引先の情報、明細、備考、合計)。書類の編集、削除、送信、署名、設定やキーの変更、電子契約へのアクセスはできません。キーごとに1分あたり60回、1日あたり5,000回までに制限され、APIの記録にはメソッド、パス、結果だけが残り、内容は残りません。

ChatGPT、Claude、GeminiなどのAIアプリは、あなたの許可を得てログインし、Supabase Authが発行するアカウントの通常のログイン用トークンを受け取ります。アプリはこのトークンで、Supabase Authが返すアカウントのメールアドレス、名前、写真を読み取れます。MCPサーバーはトークンが有効かをSupabase Authに確認し、その答えを最長1分間記憶し、トークンを他へ渡しません。ツールは公開情報と計算だけを使います。AIアプリに発行されたトークンによる、保存済みの書類、契約書、ファイル、管理者機能へのアクセスやAPIキーの作成は、データベースが拒否します。

リクエスト回数の制限のため、MCPサーバーは1分ごとに変わるソルト付きの一方向ハッシュを保存します。サーバーの記録には、呼ばれたツール、応答したかどうか、アプリ名だけが残り、リクエストの内容は残りません。

ハッシュで保存するものと、QuoteBillが暗号化しないもの

QuoteBillのコードは保存データを暗号化しません。サイトはHTTPSで提供され、1年間のStrict-Transport-Securityヘッダーを送ります。通信と保存データの暗号化はホスティング事業者とデータベース事業者が提供するもので、このページはそれについて上記以上の主張をしません。

  • 署名リンク、署名者のセッション、APIキー:SHA-256ハッシュとしてのみ保存します。
  • アクセスコード:ソルト付きのbcryptハッシュとしてのみ保存します。
  • 訪問者コード:ネットワークアドレスとブラウザー情報を、毎日変わる鍵で作ったキー付きハッシュ(HMAC-SHA-256)にした値で、アドレス自体は保存しません。
  • リクエスト回数の記録:ネットワークアドレスのソルト付きハッシュ。
  • 招待の記録:入力されたメールアドレスのSHA-256ハッシュ。
  • パスワード:Supabase Authが扱います。

ブラウザーでの保護

ページはX-Content-Type-Options: nosniffと厳格なリファラーポリシーを付けて送られます。他のサイトはフレームでこれらを表示できません(X-Frame-Options: DENYとframe-ancestors noneの規則)。埋め込み用に作られたテンプレートとツールの埋め込み画面だけが例外です。

契約書、署名、確認のページには、厳格なコンテンツセキュリティポリシーが適用されます。スクリプトはQuoteBill自身からのみ読み込まれ、フレームはなく、接続先はQuoteBillとそのデータベース事業者だけです。これらのページには広告、分析ツール、訪問の集計がなく、検索エンジンにインデックスされず、キャッシュもされません。

アカウントの削除

設定でアカウントを削除できます。QuoteBillはアップロードした画像とアカウントを削除し、アカウントに結び付く書類、契約書、APIキー、いいね、招待コードも一緒に削除されます。残るものは個人情報の取り扱いについてのページに書かれています。完了した契約書の確認用の記録、削除された送信済み契約書の最小限の記録(一定期間保管)、招待の記録です。

脆弱性の報告

弱点を見つけた場合は、該当のページ、再現手順、確認した内容を auto0104@gmail.com までお知らせください。他の人のデータは含めず、公開する前に修正の時間をください。同じアドレスがsecurity.txtファイル(/.well-known/security.txt)にも記載されています。

このページは報奨金をお約束するものではありません。

改訂

最終更新日:2026-10-06。

  • 2026-10-06: このページの初版です。

auto0104@gmail.com