まだ正式な標準にはなっていないが、HTML5はここ数年で急速に普及している。ウェブ、モバイル、SOAを問わず、あらゆる技術がHTML5と統合するという戦略を持っているようだ。しかし、HTML5はHTMLの単なるバージョンアップではない。JavaScriptやWebSocketsのような他の技術も包含しているからだ。WebSocketsについては最近、詳しい話を聞いた。また、WebSocketsのプレゼンテーションやRESTに対してどのような影響があるかについても紹介した。しかし近頃、Lori Macvittie氏はこの技術によって安全性を犠牲にして性能を追求されることで、ウェブの安全性を脅かされるのではないかと考えている。氏が2011年のレポートに言及しながら指摘するように、多くの開発者がすでにセキュリティを犠牲にして性能を追求しており、調査によれば、
... 91%の回答者がセキュリティと性能を交換しており、81%がセキュリティ関連の機能を無効にしている。
しかし、これがWebSocketsにどのように影響するのか。Lori Macvittie氏によれば、WebSocketsはHTTPヘッダがないので脆弱性が生まれてしまう。というのは、既存のウイルスやマルウエア対策ソフトにはコンテンツの種類が判別できる情報が必要だからだ。
CONTENT-TYPEはエンドポイントにどのような種類のコンテンツが送信されてくるかを知らせるヘッダです。アンチウイルスソフトやマルウエアスキャンソフトが得意なのは、特定のコンテンツの種類の中の例外を検出することです。MIMEタイプがわからなければ、どのような入力が与えられたのか判別する能力が不安定になります。
もちろん、HTTPヘッダを頼りにすれば悪意のあるコンテンツを防げるという保証はない。しかし、氏が言うように、
[...] 一般的に言って、データを提供するアプリケーションはデータの種類を偽装しません。また、データの値を改ざんしようとするのに利用される脆弱性は稀です。結局、ある特定のデータの種類経由で悪意のあるペイロードを要求してしまうのは、そのデータの種類がさまざまな攻撃の土台になってしまっているからです。つまり、特定の改ざんされたペーロードに対する特定の処理を実行することで攻撃が発動するのです。従って、エンドポイントが受け取ったコンテンツの種類が意図されたものである解釈することが必要なのです。
氏は続けて、WebSocketsの拡張性(サブプロトコル拡張)に触れている。この拡張性を利用すれば、フォーマットとプロトコルを追加で定義できるのだが、氏はこの拡張性がファイアフォールによる問題解決を邪魔する、と指摘している。
[...] WebSocketがどんな情報を通信しているのかは、その通信を使って“話して”みないとわかりませんが、実際にはアクセスできるかどうかはわかりません。これによって、特定のコンテンツの種類の特定のシグネチャや例外をスキャンするように設計されているセキュリティソフトは動作しなくなります。そのようなセキュリティソフトはWebSoket経由の情報を抽出できないのです。どこからデータが始まり、どこで終わっているのか判別するための指標もなければ、どのようなデータかもわからないからです。コンテンツの種類だけでなく長さも教えてくれたHTTPヘッダがないということは、ヘッダに含まれる情報を元にしてデータを処理したり、抽出したりするソフトウエアやハードウエアにとって問題になります。
WebSocketの実装やプロトコルに対しては、他のウェブプロトコルが過去に指摘されたように、セキュリティ上の欠陥が指摘されていた。また、分散システムのセキュリティはHTMLよりも数十年前から論じられてきた。とりわけバイナリプロトコルには議論の蓄積がある。従って、バイナリシステムを安全にするのは可能だ。Lori氏の主張の要点は、ウェブの性能を追求する一方で、ウェブの大部分がHTTPに基づいており簡単に置き換えたり除去したりできない、ということを無視してはならない、ということだろう。WebSocketsの普及は避けられないようだが、セキュリティに関してWebSocketsの土台はどのようにあるべきかを考える時期に来ているようだ。