ウェブセキュリティ
=========

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

コンテンツセキュリティ
-----------

コンテンツセキュリティポリシー (CSP)

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

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

Transport layer security (TLS)

Transport Layer Security (TLS) プロトコルは、ネットワークで結ばれた 2 つのアプリケーションや端末が、私的にかつ強固に情報交換するための標準です。TLS を使用するアプリケーションは、セキュリティ引数を選択することができ、これは、データのセキュリティと信頼性に大きな影響を与える可能性があります。この記事では、TLS の概要と、コンテンツを保護するために必要な決定の種類について説明します。

HTTPS

**HTTPS** (***HyperText Transfer Protocol Secure***) は、HTTP プロトコルの暗号化バージョンです。SSL または TLS を使用して、クライアントとサーバー間のすべての通信を暗号化します。この安全な接続により、クライアントは意図したサーバーに接続されていることを確認し、機密データを交換することができます。

HTTP Strict-Transport-Security

`Strict-Transport-Security:` は HTTP のヘッダーで、ウェブサイトを HTTPS を使用してのみアクセスできるようにするものです。

電子証明書の透明性

**電子証明書の透明性**は、証明書の誤発行を防止し、監視するために設計されたオープンなフレームワークです。新しく発行された証明書は、公開されている、多くの場合独立した CT ログに「記録」され、発行された TLS 証明書の追加のみの暗号的に保証された記録を維持します。

混在コンテンツ

HTTPS のページの中に通常の平文の HTTP で送られてくるコンテンツが含まれている場合、**混在コンテンツ**と呼ばれます。このようなページは部分的にしか暗号化されておらず、盗聴者や中間者攻撃者が暗号化されていないコンテンツにアクセスできてしまいます。

混在コンテンツでブロックされるウェブサイトを修正するには

ウェブサイトを HTTPS で配信している場合、ページ上にある 能動的な混在コンテンツはすべて既定でブロックされます。結果として、ユーザーからはそのウェブサイトが壊れているように見えるかもしれません (iframe やプラグインが読み込まれないなど)。一方、受動的な混在コンテンツは既定で表示されますが、このようなコンテンツをブロックするようにユーザーが設定することも可能です。このページでは、ウェブ開発者として知っておくべきことを説明します。

安全なコンテキスト

**安全なコンテキスト (Secure Context)** とは、(HTTPS/TLS を介して) コンテンツが安全に配信され、安全**ではない**コンテキストとの通信の可能性が限られているという合理的な確信がある `Window`、または `Worker` のことです。多くの Web API が安全なコンテキストでのみ利用可能です。安全なコンテキストの主目的は、中間者攻撃者が被害者に更なる危険にさらす可能性がある強力な API にアクセスするのを防ぐことにあります。

安全なコンテキストに制限されている機能

このリファレンスは、安全なコンテキストでのみ使用できるウェブプラットフォーム機能の一覧です。

脆弱な署名アルゴリズム

デジタル証明書の電子署名に用いられるハッシュアルゴリズムの強度は、証明書のセキュリティにおいて核心的な要素です。この記事では、脆弱になったため、可能であれば避けるものと知られている署名アルゴリズムについて、いくらかの情報を提供します。

301 および 302 レスポンスコードによるリダイレクト

執筆予定

データセキュリティ
---------

HTTP Cookie の使用

HTTP Cookie (ウェブ Cookie、ブラウザー Cookie) は、サーバーがユーザーのウェブブラウザーに送信する小さなデータであり、ブラウザーに保存されて次のリクエストと共に同じサーバーへ返送されます。一般的には、二つのリクエストが同じブラウザーから送信されたものであるかを知るために使用されます。例えば、ユーザーのログイン状態を維持することができます。

ローカルストレージ

`Window` オブジェクトの `Window.localStorage` プロパティは、サーバーがクライアントにセッションを通して存在するデータを格納する一つの手段です。

情報漏洩
----

Referer ヘッダーのプライバシーとセキュリティの考慮事項

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

Robots.txt

執筆予定

Site maps

執筆予定

完全性
---

同一オリジンポリシー

**同一オリジンポリシー**とは、あるオリジンから読み込まれた文書やスクリプトについて、そのリソースから他のオリジンのリソースにアクセスできないように制限するものです。同一オリジンポリシーはウェブのセキュリティにおける重要な仕組みであり、悪意ある行動を起こしかねないリソースの分離を目的としています。

サブリソース完全性

**サブリソース完全性** (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 タイプのスニッフィングを抑止することができます。すなわち、ウェブマスターが自分が何をしているかを分かっていると言う手段です。

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

クリックジャックでは、ユーザーがだまされて、ユーザーが期待するもの以外のアクションを実行する 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` セレクターにより、ウェブサイトがユーザーの閲覧履歴を明らかにし、そのユーザーがどのサイトを訪問したかを把握することができました。この問題を軽減するために、ブラウザーは訪問したリンクから取得できる情報量を制限しています。

セキュリティに関する用語集の用語
----------------

* Block cipher mode of operation
* Certificate authority
* Challenge-response authentication
* Cipher
* Cipher suite
* Ciphertext
* CORS
* CORS-safelisted request header
* CORS-safelisted response header
* Cross-site scripting
* Cryptanalysis
* Cryptographic hash function
* Cryptography
* CSP
* CSRF
* Decryption
* Digital certificate
* DTLS
* Encryption
* Forbidden header name
* Forbidden response header name
* Hash
* HMAC
* HPKP
* HSTS
* HTTPS
* Key
* MitM
* OWASP
* Preflight request
* Public-key cryptography
* Reporting directive
* Robots.txt
* Same-origin policy
* Session hijacking (en-US)
* SQL injection
* Symmetric-key cryptography
* TOFU

* TLS
関連情報
----

* ブログ
* @mozsec (Twitter)