以前に書いた記事の最後で少し不信感を抱いたスプレッドシートですが、
流石に安全に使えるよう作られているようです。
確かめるためにちょっとした実験をしましたので、
もしお時間ありましたら見ていってください。
①開いただけでメアド盗まれる疑惑
スプレッドシートのマクロでできることを調べていたら、
こんなメソッドを見つけました。
「Session.getActiveUser().getEmail()」
簡単に言うと、自分のメアドが分かります。
これを利用して、シートを開いたときに、
開いた人のメアドをどこかに書き込めないかと思ったわけです。
閲覧履歴であり、自動メアド盗み機能でもあります。
実験の材料として「シート調査1」というシートを用意。
今は2行目だけ見ていてください。
このシートを開いたときに↓の処理が走ります。
sheet.getRange(“B2”).setValue(Session.getActiveUser().getEmail());
これでシート作成者のメアド「r…」が入力されました。
リンクを知っていれば編集までできるような設定にしているので、
このシートのURLを拡散して、赤の他人にシートを開かせます。
なんとB2の値は空文字でした。
どうやら「getEmail」は、シートのオーナー以外は機能しないようです。
それならマクロの処理で一時的にオーナーを変更すればと思いましたが、
オーナーの変更にはメアド情報が必要なので不可能です。
少なくとも標準機能では、赤の他人のメアドを盗み見ることは出来ないようですね。
②赤の他人のシートから情報を盗める疑惑
もう一度、一番上の画像をご覧ください。
先ほどの無視した3~4行目に注目です。
これは「importrange」関数を使った数式をセルに入力することで、
別のシートに書いてある内容を持ってきているのです。
それぞれこんな感じで入っています。
2:承認しないと閲覧もできない設定
3:リンクを知っていれば編集もできてしまう設定
(ちなみに、赤の他人が開いたときの画像では3~4行目は空っぽですね。
メアドが取得できないときは表示しないようにマクロを書いてみました。
ソースから情報源を知られてしまうので重要な情報には使えませんが、
非公開のシートで遊ぶ分には楽しく使える機能だと思います。)
話を戻します。
要するに、赤の他人がこれらの情報を得られたら危険なのです。
という訳で、試した結果がこちら。
情報を得られました、危険です!
半分冗談ですが、半分本気です。
ただ、アクセスできる条件は厳しいですね。
・スプレッドシートのURL、シート名、セルの位置がドンピシャで一致すること。
・リンクを知っていればアクセスできる共有設定にしてあること。
URL等はランダム文字列を延々と試すと当たってしまいそうですが、
この共有設定にさえしなければ許可無くアクセスは出来なくなります。
まとめ
安心してスプレッドシートを利用するために、
誰かに共有したい時は極力承認が必要な設定にしましょう。
やむを得ない場合は、書き込む情報に気を付けましょう。
また、今回の実験はあくまで「落ち度が無い想定」です。
ちょっとした誤操作や誤入力があるだけで、
情報は盗まれ放題になります。
やはりスプレッドシートは怖いものかもしれません。