データの取り扱いとセキュリティ
要点:Open Stress Check のデータの取り扱いの基本方針は、受検者を特定する情報を受け取らず、必要になるまで回答をサーバーに送らないことである。個人のセルフチェックは端末の中で採点し、「保存してURLを発行」を押したときだけ結果を保存します。保存した結果を開くための秘密の値はURLの「#」より後ろに置き、サーバーには秘密の値のハッシュだけを保存します。保存期間は個人の結果が2年、法人の回答が5年で、個人で保存した結果を削除した場合はバックアップからも最大35日で消えます。
どんな情報を扱うのか
| 利用者 | Open Stress Check が扱う情報 | 扱わない情報 |
|---|---|---|
| 個人のセルフチェック | 保存を選んだ場合の回答、採点結果、性別(回答した場合のみ)、保存日時 | 氏名、メールアドレス、回答データと結び付けたIPアドレスやUser-Agent |
| 法人の受検者 | 回答、採点結果、実施回・部署(設定された場合)、性別(素点換算表方式の実施回のみ)、面接指導の申出の記録 | 氏名、メールアドレス、社員番号、受検コードそのもの |
| 法人の管理者・実施者 | ログインに使うアカウント情報(メールアドレスなど)、役割、実施者の氏名と資格区分 | — |
| 有料プランの契約 | 請求先の情報、契約状況 | クレジットカード番号(Stripeが管理) |
表のとおり、法人の管理者や実施者のアカウント情報、請求先の情報は取得します。Open Stress Check が受け取らないのは、受検者を特定する情報です。
個人のセルフチェックのデータの流れ
採点は端末の中で行う
回答と採点は、お使いのブラウザの中で完結します。結果が表示された時点では、回答はサーバーに送っていません。回答の途中経過は、再開できるように端末のブラウザ(localStorage)に保存します。共用のパソコンで受検した場合は、回答を終えたらブラウザのデータを消去してください。
保存したときだけサーバーに送る
「保存してURLを発行」を押すと、端末で128ビットの推測できない秘密の値を作り、https://…/r#秘密の値 という形のURLを発行します。サーバーは秘密の値のSHA-256ハッシュを結果のIDとして保存し、秘密の値そのものは保存しません。
「#」以降はサーバーやログに残らない
URLの「#」より後ろの部分(フラグメント)は、ブラウザがページを読み込むときにサーバーへ送らない決まりになっています。そのため、秘密の値は通常のアクセスログ、社内のプロキシのログ、他のサイトに送られるRefererには残りません。結果を開くときは、ブラウザが秘密の値をリクエストの本文で送り、サーバーはそのハッシュで照合します。結果ページには検索エンジンに登録させない指定(noindex)と、Refererを送らない指定(no-referrer)を付けています。
URLの管理にご注意ください
URLを知っている人は、誰でも結果を開いて削除できます。URLを他人に送ったり、共有のブックマークに保存したりしないでください。ブラウザの閲覧履歴にもURLが残ります。
法人利用のデータの守り方
受検コードはハッシュだけを保存する
受検コードは12文字のランダムな文字列です。サーバーには、秘密の鍵を使ったハッシュ値(HMAC)だけを保存し、コードの文字列そのものは保存しません。コードを出力できるのは発行したときだけで、なくした場合は再発行します。面接指導の申出に使う照合コードも、同じくハッシュ値だけを保存します。管理画面では「コードと氏名の対応表を作らない」「私物のスマートフォンでの受検を推奨する」ことを案内しています。
事業者と実施者の権限を分ける
- 事業者側(オーナー・管理者・閲覧者)が見られるのは、実施中の受検率と、締め切り後の集団分析です。
- 個人の結果を回答IDごとに見られるのは、実施者(医師・保健師など)だけです。一覧にはコードの文字列は表示しません。
- 事業者側の権限と実施者の権限は、同じアカウントに同時に付与できません。一度でも事業者側の権限を持ったアカウントは、その組織の実施者になれません。
- 実施者の招待は、招待した人とは別の、メールアドレス確認済みのアカウントでだけ受諾できます。受諾時に資格区分と、人事権を持つ監督的地位にないことの宣誓を求めます。
- 事業者は、本人が面接指導を申し出て同意が記録された照合コードについてだけ、その人の結果を閲覧できます。
- 誰がいつ何をしたかの監査ログは追記のみで、組織のメンバー全員が閲覧できます。
これらの制限は、画面の表示ではなくサーバー側で強制しています。
集団分析で個人を特定させない
- 受検者が10人未満の集団の結果は表示しません。
- 全体から表示中の集団を引いた残りが1〜9人になる場合は、さらに別の集団も非表示にします。
- クロス集計は、すべてのセルが10人以上のときだけ表示します。任意の条件で絞り込むフィルタは用意していません。
- 集団分析は、実施回を締め切った後に固定したデータでだけ表示します。
結果URLの無効化について
法人で受検した人は、自分の結果URLを無効化できます。ただし、ストレスチェックの結果の記録は実施者が保存するものなので、無効化してもデータは実施者の保管分として保存期間まで残ります。このことは受検前の同意画面で説明しています。
保存期間と削除
| データ | 保存期間 | 削除の方法 |
|---|---|---|
| 個人のセルフチェックで保存した結果 | 2年 | URLから削除できます。期間を過ぎると自動で削除します。 |
| 法人の回答 | 5年 | 期間を過ぎると自動で削除します。 |
実施マニュアルでは、本人の同意がなく事業者に提供されない結果の記録は、実施者などが5年間保存することが望ましいとされています。Open Stress Check はこれを踏まえ、法人の回答を5年間保存します。
バックアップと削除後の残存期間
- データベースは毎日暗号化してバックアップします。暗号化にはAES-GCMを使い、鍵はバックアップとは別に管理しています。
- 日次のバックアップは35日で削除されます。個人のセルフチェックの結果は月次バックアップに含めないため、削除した個人の結果はバックアップからも最大35日で消えます。
- 法人のデータは、日次のバックアップに加えて、保存期間5年の月次バックアップにも含まれます。法人のデータを削除した後も、月次バックアップにはその保存期間の間残ります。
- バックアップは、公開されていない保存領域(Cloudflare R2)に保管します。
外部サービスとデータの保存先
| 用途 | 利用するサービス | 内容 |
|---|---|---|
| Webサイトの配信、データベース、バックアップ | Cloudflare | データベースはアジア太平洋リージョンを指定して作成しています。 |
| 法人の管理者・実施者のログイン | Firebase Authentication(Google) | 管理画面(/app)でだけ読み込みます。公開ページと受検画面では読み込みません。 |
| 有料プランの決済 | Stripe | クレジットカード情報はStripeが管理し、Open Stress Check のサーバーには保存しません。 |
公開ページと受検画面では、広告やアクセス解析のための外部トラッカー、外部フォントを読み込みません。個人の結果に表示するセルフケアのヒントは事前に作成したもので、回答内容をAIなどの外部サービスに送ることはありません。
脆弱性の報告・お問い合わせ
セキュリティ上の問題を見つけた場合は、sa@3bitter.com までご連絡ください。データの取り扱いの詳細はプライバシーポリシーもあわせてご覧ください。