shiodaifuku.io

某ブラウザの件には考えさせられた

この記事はしおだいふく Advent Calendar 2020 21日目の記事です。 昨日長めの記事を書いたのと明日以降の仕込みがあるので今日は短めにいきます。

昨日今日と某国産ブラウザがアクセスしたページのソースを送信していた件で界隈が盛り上がりましたね。

我々Webエンジニアは、ブラウザが設定しているセキュリティレベルが安全なWebを実現するために必要な一種の制約であるという認識のもとで日夜開発に励んでいます。 さて、ある日突然ブラウザ自体が信頼できないものになってしまいました。 僕たちはそれでもセキュアなWebサイトを制作できているでしょうか?

というようなことを少し考えてみたいと思います。

先にまとめ

本件に関しては先に結論を書いておいたほうがいいと思うので書いておきますが、本当に悪意のあるブラウザを相手にした場合大抵の努力は無駄です。 こんなネガティブな方向に思いを巡らせるくらいなら本筋の機能開発に熱意を注いだほうがコスパがよいです。

それでもこのトピックを取り上げた理由は、特に(僕の本業であるところの)エンターテインメント業界のユーザ様は使うツールにこだわりが強い方が多い傾向にあり、 マイナーなブラウザとかよくわからないブラウザ拡張とか外部ツールみたいなやつを使いがちです。

また、どこの会社とは言いませんが自分が読めない外国語の文書を見るやいなやそれが関係者外秘かどうかとか考えずにGoogle翻訳にかけたりする人がいたようないなかったような・・・ (咳払い)とにかく、第三者が用意しているフォームに何かを入力してサブミットすることにあまりに無関心な人が残念ながらたくさんいるわけです。

それで本人が被害を受けるならまぁ最悪自己責任なので仕方ないのですが、何も悪いことをしていない第三者が被害を被るのはシステム設計のレベルで避けられるなら避けないといかんなと思ったので、 少し考えてみようと思ってこの記事を書いています。

考えるべきポイント

ここに書かれている内容は酒を飲んだあとで適当に思いついたことを並べているだけです。 安全かどうかは全く検討も検証もしていない世迷い言の類なのでご利用は計画的に。

オブジェクトに意味のある名前をつけない

例えばHTMLタグのid属性とかclassとか外部リソースのファイル名とかに人間にわかり易い名前をつけるのは避けたほうがいいかもしれないですね。 開発者にとっては地獄っぽいですが。うまくツールの力を借りればなんとかなる・・・?

ページ内に不必要な第三者の情報を載せない

これはまぁ対策というほどでもありませんね。常識の範疇です。 ユーザが第三者に公開してもいい情報をオプトインでコントロールできるような機能とセットにしておくとよさそうです。

hidden inputやdisplay:noneの要素に余計なものを埋めない

最近のフロントエンドフレームワークを使っているならそんなに気にしなくていいと思いますが、 古き良きフルスタックフレームワークの使い手はなんやかんやhidden inputでトークンとかあまりお漏らししたくないものをHTMLに埋め込みがちなので気をつけたいなと思いました。

ログイン済ページに表示する画像の閲覧に認証を要求する

FirebaseのStorageのようなサービスを使うと便利ですが、特定のユーザにしか見せたくない画像は そのユーザでないと(URLを知っているだけでは)表示できないような仕組みを使うとある程度守れそうな気がします。

重要情報を画像化する

自分で書いておいてクソだなという感想しか湧いてこないので多分実装することはないと思いますが、 上述の画像認証テクニックと併せて重要情報をテキストでなく画像で扱うことでなんとなく防御力が向上しそうな気がします。

当然、画像はテキストに比べてサイズがでかいとか動的な画像生成はめんどくさいとかいろいろ考えないといけないことはあるのですが、 うまくUIにハマるならありかもしれないです。

結論

やっぱりこんなことはやりたくないですね。

スパイウェアは滅んでほしいし、ユーザ各位にも自分が使っているツールが何者なのかを自覚した上で使うだけのリテラシを身に着けてほしいです。 どちらもなかなか難しいことではありますが。

最新記事

  1. Cloud RunでgRPC streamingができるようになったので動かしてみたりした
  2. 2020年の執筆業まとめ
  3. アーキテクチャを設計する仕事とは
  4. 決済システムを設計するときに忘れてはならないたった1つの大切なこと
  5. third-party cookieと2020年