見逃しがちな HTML の基本
2021 年 10 月 15 日 Trevor Collins 著
ミズーリ州のマイク・パーソン知事が、データ漏洩を公表したジャーナリストを起訴すると脅迫するツイートをしたことが話題になりました。ツイートと知事の記者会見によると、St. Louis Post-Dispatch 紙のジャーナリストが、とある公開 Web ページの HTML にアクセスしてそれを解読したところ、教師の社会保障番号が埋め込まれていることを発見したため、州の初等中等教育局にデータ漏洩を報告したとのことです。Web サイトの管理者は、その情報を保護するべくサイトを更新しました。つまり、サイト自体の欠陥が見つかったことを示しています。それに対しパーソン知事は、責任を持って情報を公開したジャーナリストに感謝せず、代わりにこの「ハッキング」行為に対して法的措置を取る、と脅しました。滑稽なコメントではありますが、これは Web サイト上の個人情報を保護する方法について、以下のような貴重な教訓を与えてくれます。
● 「非表示」や「パスワード」の設定が変えるのはブラウザの表示内容だけ
HTML コードがブラウザ上に表示される際、見た目は違っても、HTML の内容は誰でも見ることができます。ブラウザのようなアプリケーションがコードを隠してくれるということはありません。ユーザは、パスワードフィールドや隠しフィールドを変更することでこの情報を表示することができます。
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password
● 個人情報を HTML にエンコードしない
Web サイトでは、HTML を base64 にエンコードすることでインターネット経由でのブラウザへのコード転送が容易になります。しかし、これは誰でも簡単に解読できるため、個人情報を base64 で送信することはお勧めできません。個人情報を送る場合は、HTTPS を使用して暗号化してください。もちろんページにアクセスできる人物であれば誰でも解読できてしまうので、クライアントに閲覧権限のある情報のみに絞ってください。Base64 には特定の使い道があります。例えば、データベースへの問い合わせに特殊な記号が使われていると、URL が壊れてしまいます。それを解決するため、クエリ送信時に Base64 でエンコードするという方法があります。いずれにしても、そのクエリの中に個人情報が含まれているのは好ましくありません。
https://developer.mozilla.org/en-US/docs/Glossary/Base64
● 必要な情報だけを送る
暗号化された情報は、万が一クライアントで復号化された場合データを保護することができません。これは、HTML にスクリプトを組み込んだ場合によく起こります。スクリプトは、クライアントの情報をサーバに問い合わせ、サーバは要求されたデータへのリンクを返信します。このリンクは、ブラウザでコードをデバッグしたり、Burp Suite や Fiddler などのプログラムでトラフィックを確認したりすることで確認できます。これにより、認証なしでデータに直接アクセスすることが可能になってしまいます。これを防ぐために、保護データが要求された時点で、クライアントが認証を受けていることを確認する必要があります。その際セッション cookie を使用しますが、クライアントに脆弱性があった場合に備え、セッションの有効期限は短く設定してください。また、許可を与える範囲を必要なデータへのアクセスのみに絞ることで、他の保護されたデータを安全に保つことができます。
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies
エンコードの有無にかかわらず、クライアントがサーバに認証され、そのデータを閲覧する権限を確認できるまで、Web サーバは決して保護されたデータを送信するべきではありません。これが守られていれば、ミズーリ州政府が現在直面している問題の少なくとも一部は防ぐことができたはずです。