Web セキュリティ

Web サイトや公開 Web アプリケーションが安全であることを保証するのは重要なことです。コードの中の単純なバグが、個人情報の漏洩という結果を招くことがありますし、データを盗む方法を見つけようとしている悪い輩があちこちにいます。以下に紹介するセキュリティ方面の記事では、コードの安全性を確保する際に助けとなる情報を提供しています。

コンテンツセキュリティ

コンテンツセキュリティポリシー (CSP)
コンテンツセキュリティポリシー (CSP) は、クロスサイトスクリプティング (XSS) やデータインジェクション攻撃などのような、特定の種類の攻撃を検知し、影響を軽減するために追加できるセキュリティレイヤーです。これらの攻撃はデータの窃取からサイトの改ざん、マルウェアの拡散に至るまで、様々な目的に用いられます。

コネクションセキュリティ

Transport security layer (TLS)
Transport Layer Security (TLS) プロトコルは、ネットワークで結ばれた二つのアプリケーションや端末が、私的にかつ強固に情報交換するための標準です。 TLS を使用するアプリケーションは、セキュリティ引数を選択することができ、これは、データのセキュリティと信頼性に大きな影響を与える可能性があります。この記事では、 TLS の概要と、コンテンツを保護するために必要な決定の種類について説明します。
HTTPS
HTTPS (HyperText Transfer Protocol Secure) は、 HTTP プロトコルの暗号化バージョンです。 SSL または TLS を使用して、クライアントとサーバー間のすべての通信を暗号化します。この安全な接続により、クライアントは意図したサーバーに接続されていることを確認し、機密データを交換することができます。
HTTP Strict-Transport-Security
Strict-Transport-Security:HTTP のヘッダーで、Web サイトを HTTPS を使用してのみアクセスできるようにするものです。
電子証明書の透明性
電子証明書の透明性は、証明書の誤発行を防止し、監視するために設計されたオープンなフレームワークです。新しく発行された証明書は、公開されている、多くの場合独立した CT ログに「記録」され、発行された TLS 証明書の追加のみの暗号的に保証された記録を維持します。
混在コンテンツ
HTTPS のページの中に通常の平文の HTTP で送られてくるコンテンツが含まれている場合、混在コンテンツと呼ばれます。このようなページは部分的にしか暗号化されておらず、盗聴者や中間者攻撃者が暗号化されていないコンテンツにアクセスできてしまいます。
混在コンテンツでブロックされるWeb サイトを修正するには
Web サイトを HTTPS で配信している場合、ページ上にある 能動的な混在コンテンツはすべて既定でブロックされます。結果として、ユーザーからはその Web サイトが壊れているように見えるかもしれません (iframe やプラグインが読み込まれないなど)。一方、受動的な混在コンテンツは既定で表示されますが、このようなコンテンツをブロックするようにユーザーが設定することも可能です。このページでは、Web 開発者として知っておくべきことを説明します。
安全なコンテキスト
安全なコンテキスト (Secure Context) とは、(HTTPS/TLS を介して) コンテンツが安全に配信され、安全ではないコンテキストとの通信の可能性が限られているという合理的な確信がある Window、または Worker のことです。多くの Web API が安全なコンテキストでのみ利用可能です。安全なコンテキストの主目的は、中間者攻撃者が被害者に更なる危険にさらす可能性がある強力な API にアクセスするのを防ぐことにあります。
安全なコンテキストに制限されている機能
このリファレンスは、安全なコンテキストでのみ使用できるWeb プラットフォーム機能の一覧です。
脆弱な署名アルゴリズム
ディジタル証明書電子署名に用いられるハッシュアルゴリズムの強度は、証明書のセキュリティにおいて核心的な要素です。この記事では、脆弱になったため、可能であれば避けるものと知られている署名アルゴリズムについて、いくらかの情報を提供します。
301 および 302 レスポンスコードによるリダイレクト
執筆予定

データセキュリティ

HTTP Cookie の使用
HTTP Cookie (ウェブ Cookie、ブラウザ Cookie) は、サーバーがユーザーのWeb ブラウザに送信する小さなデータであり、ブラウザに保存されて次のリクエストと共に同じサーバーへ返送されます。一般的には、二つのリクエストが同じブラウザから送信されたものであるかを知るために使用されます。例えば、ユーザーのログイン状態を維持することができます。
ローカルストレージ
Window オブジェクトの Window.localStorage プロパティは、サーバーがクライアントにセッションを通して存在するデータを格納する一つの手段です。

情報漏洩

Referer ヘッダーのプライバシーとセキュリティの考慮事項
HTTP の Referer ヘッダーにまつわるプライバシーとセキュリティのリスクがあります。この記事ではこれらを説明し、これらのリスクを回避するためのアドバイスを提案します。
Robots.txt
執筆予定
Site maps
執筆予定

完全性

同一オリジンポリシー
同一オリジンポリシーとは、あるオリジンから読み込まれた文書やスクリプトについて、そのリソースから他のオリジンのリソースにアクセスできないように制限するものです。同一オリジンポリシーは Web のセキュリティにおける重要な仕組みであり、悪意ある行動を起こしかねないリソースの分離を目的としています。
サブリソース完全性
サブリソース完全性 (Subresource Integrity) (SRI) は、 (CDN などから) 取得したリソースが意図せず改ざんされていないかをブラウザが検証するセキュリティ機能です。 SRI を利用する際には、取得したリソースのハッシュ値と一致すべきハッシュ値を指定します。
HTTP の Access-Control-Allow-Origin
Access-Control-Allow-Origin レスポンスヘッダーは、指定されたオリジンからのリクエストを行うコードでレスポンスが共有できるかどうかを示します。
HTTP X-Content-Type-Options

X-Content-Type-Options は HTTP のレスポンスヘッダーで、 Content-Type ヘッダーで示された MIME タイプを変更せに従うべきであることを示すために、サーバーによって使用されるマーカーです。これにより、MIME タイプのスニッフィングを抑止することができます。すなわち、Web マスターが自分が何をしているかを分かっていると言う手段です。

クリックジャックからの保護

クリックジャッキングでは、ユーザーがだまされて、ユーザーが期待するもの以外のアクションを実行するUI要素をクリックします。 

HTTP X-Frame-Options
X-Frame-Options HTTP レスポンスヘッダーを使用して、ブラウザが <frame>, <iframe>, <embed> または <object> でページをレンダリングできるかどうかを示すことができます。サイトはこれを使用してコンテンツが他のサイトに埋め込まれないようにすることで、クリックジャッキング攻撃を回避できます。
CSP: frame-ancestors
HTTP Content-Security-Policy (CSP) frame-ancestors ディレクティブは、 <frame><iframe><object><embed>, または <applet> を使用して、ページを埋め込むことができる有効な親を指定します。

ユーザー情報セキュリティ

安全でないパスワード
HTTP 経由でログインフォームを送信することは、ユーザのパスワードを抽出するために使用できる様々な攻撃があるため、特に危険です。ネットワーク盗聴者は、ネットワークを盗聴したり、転送中に提供されたページを変更したりすることで、ユーザのパスワードを盗むことができます。
プライバシーと :visited セレクタ
2010年頃までは、CSS :visited セレクタにより、Web サイトがユーザーの閲覧履歴を明らかにし、そのユーザーがどのサイトを訪問したかを把握することができました。この問題を軽減するために、ブラウザは訪問したリンクから取得できる情報量を制限しています。

関連情報