# 9 セキュリティと暗号化
Webアプリケーションの開発者にとっても、Webアプリケーションのセキュリティホールの攻撃者も、Webアプリケーションのセキュリティという話題に対してはますます熱い視線を送っています。特に最近のCSDNのパスワード漏洩事件によって我々はWebセキュリティという話題により注視するようになっています。パスワードの話をするとみんな顔色が変わります。みんな自分のシステムにセキュリティホールがないか検査し始めました。Goプログラムの開発者として、我々のアプリケーション・プログラムがいつでも大多数の攻撃者の目標となりうることを知っておかなければなりません。前もって防御する準備を整えておかなければなりません。

Webアプリケーションプログラムのセキュリティ問題の理由の多くは軽々しく第三者からもたらされたデータを信じてしまうことにあります。例えばユーザの入力したデータに対して、これに対し検証を行う前はすべて安全ではないデータであるとみなさなければなりません。もしこれらの安全ではないデータをクライアントに出力すると、クロスサイトスクリプティング(XSS)の問題を引き起こしかねません。もし安全ではないデータをデータベースの検索に使用すると、SQLインジェクションの問題を引き起こす可能性があります。我々は9.3、9.4節においてどのようにこれらの問題を避けるかについてご紹介します。

ユーザの提供するデータなど第三者が提供したデータを使用する際、まずこれらのデータの合法性を検証することは非常に重要です。これらのプロセスをフィルタリングと呼びます。9.2節においてどのようにすべてのデータに対してフィルタリングを行うかご紹介します。

入力のフィルタリングと出力のエスケープはすべての問題を解決するわけではありません。9.1節でCSRFアタックについてご紹介します。ターゲットが攻撃者の指定するリクエストを送ってしまうことで破壊を発生させる可能性があります。

セキュリティ暗号化では、我々のWebアプリケーションプログラムを強化できる強力な手段が暗号化です。CSDN漏洩事件はパスワードを平文で保存していたことによるものです。攻撃者がデータベースを取得した後直接いくつかの破壊行為が実施できてしまいました。しかし、他のツールと同じく暗号化手段もしっかりしていなければなりません。9.5節ではどのようにパスワードを保存し、パスワードを安全に保存するかご紹介します。

暗号化の本質はデータをかき乱すことにあります。ある逆算不可能なデータの撹拌を単方向暗号化もしくはハッシュアルゴリズムと呼びます。また双方向の暗号化方式もあります。暗号化したデータを逆に復号することができます。9.6節でどのようにしてこのような双方向の暗号化方式を実現するかご紹介します。

## 目次
  ![](images/navi9.png?raw=true)

## links
   * [目次](<preface.md>)
   * 前へ: [第八章概要](<08.5.md>)
   * 次へ: [CSRF攻撃の予防](<09.1.md>)
