とっても便利なGoogleフォームですが、とても恐ろしい弱点があります。それは、ある設定を一つ間違うだけで…情報漏えいにつながるというものです。実際に多くの事故が発生しています。
それは、「設定」の「表示設定」に含まれる「結果の概要を表示する」というオプションです。これが図のようにONになっていると危険な状態です。
この結果の概要を表示するというのは、ちょっとしたアンケートを取って共有する場合に有効です。例えば
あなたは犬派?猫派?
なんてアンケートを取った後に、すぐに結果グラフを出したい…といった時に使えます。
しかし問い合わせフォームなどでこれをONにしてしまうと…過去の回答者の回答内容…つまり弊社の問い合わせフォームなら、過去の問い合わせ内容すべてが見られてしまうわけです。ワンクリックで恐ろしい結果につながります。
この設定をONにしなければ良いだけなのですが、あまりに簡単なので間違ってクリックしてしまう可能性は否めません。
しかし、この設定はAPIで確認できます。大きな会社では「全社で使われているGoogleドライブの中のGoogleフォームをすべて見つけてDBに登録し…定期的に設定を確認して、問題がある場合は強制的に正す」なんて仕組みを作ることも可能です。しかしそこまで対処できないことが多いかと思います。ですので比較的簡単なリスク低減方法を紹介したいと思います。
Googleフォームの設定メニューにあるApps Scriptsをクリックして、Googleフォームに紐づくGASを準備します。そして以下の関数を設定します。
function myFormCheck() {
let form = FormApp.getActiveForm();
if (form.requiresLogin() == false && form.isPublishingSummary() == true ) {
//アウト!
console.log("問題発生!");
let subject = "フォームの設定に問題が見つかりました!";
let body = `
大至急監査ログを確認してださい。\n
Form ID:xxxxxxxx
`;
let to = "hoge@hoge.com";
MailApp.sendEmail({to, subject, body});
form.setPublishingSummary(false);
} else {
// セーフ!
console.log("No problem.");
}
}
これは「フォームが組織内に限定されておらず、『結果の概要を表示する』がON」かどうかをチェックした上で、危険な状態であれば報告メールを送ると同時に『結果の概要を表示する』をOFFにします。赤字のメール本文は「管理者が管理コンソールでログを調査する」イメージで書いていますが自由に変更して構いません。改行は「\n」と記してください。青字のメールアドレスは適宜変更してください。
これを日次なり毎時のトリガーで起動しておけば…関係者の誰かが間違ってONにしてしまっても元に戻ります。
定期的にトリガーの実行結果を確認して、きちんと動き続けていることを確認すると尚良いと思います。
もう一つ対策があります。被害と最小限するという作戦です。多くの問い合わせフォームの結果は、スプレッドシートにリンクしていると思います。していなければリンクしてください。
リンクすると、「まずGoogleフォームに回答が記録される」「Googleフォームからリンクしたスプレッドシートにも回答を自動記録する」という動きをします。先程の『結果の概要を表示する』とは「Googleフォームの中の回答の概要を表示する」機能です。しかし実際に使うのはスプレッドシートであることが多いと思います。ですので「定期的にGoogleフォームの中身を消してしまう(スプレッドシートは消さない)」ことで被害を減らすことができます。これも簡単なGASで実装できます。
function allDelete() {
let form = FormApp.getActiveForm();
form.deleteAllResponses();
}
これを日次なり毎時のトリガーで起動しておけば、もし設定ミスが発生したとしても…日次なら最大1日分、毎時なら最大1時間分の情報漏洩で済む訳です。漏洩はない方が良いですが、あったとしても被害が最小限になるようにしておけば、更に安心ですね。
Googleフォームは少し工夫するだけで安全に使えます。ぜひ試してみてください!