Web技術の基本 (6) Webのセキュリティと認証

# この記事の内容について
　Web系エンジニアになるための必須知識の1つである「Web技術の仕組み」について、初学者でもわかりやすいと定評のある書籍「イラスト図解式 この一冊で全部わかるWeb技術の基本」の要点を自分なりにまとめて、理解力の向上に努めていきます。
　私はまだエンジニア歴1年未満の初学者なので、間違い等があればご指摘いただけると幸いです。
# Web技術の基本 (1) 〜 (7)
[Web技術の基本(1) 〜Web技術とは〜](https://qiita.com/Nao52/items/a12402f8e21a9b9ba961)
[Web技術の基本(2) 〜Webとネットワーク技術〜](https://qiita.com/Nao52/items/9f5d7731abbec8f5f4eb)
[Web技術の基本(3) 〜HTTPでやりとりする仕組み〜](https://qiita.com/Nao52/items/e95a7094893f2332e68f)
[Web技術の基本(5) 〜Webアプリケーションの基本〜](https://qiita.com/Nao52/items/65c1a599f1ed484e6e5e)
[Web技術の基本(6) Webのセキュリティと認証](https://qiita.com/Nao52/items/326948f6195a515900fd)

# 1. Webシステムのセキュリティ
### 情報セキュリティの3要素
* 機密性
第三者にアクセスさせないこと
* 完全性
情報が破壊、改ざん、消去されていない状態を確保すること
* 可用性
情報へのアクセスがいつでもできること
### リスク・脅威・脆弱性
* リスク
何らかの損失が発生する可能性
* 脅威
リスクを現実化させる要因
* 脆弱性
脅威に対する弱み

# 2. パスワードクラッキング、DoS攻撃
### パスワードクラッキング
#### パスワードクラッキングとは？
　個人情報を狙い、IDとパスワードによる認証を行う会員制Webサイトからユーザーのパスワードを抜き出そうとする攻撃のこと
#### パスワードを抜き出すために使われる主な手法
* 辞書攻撃
よくパスワードで使われる単語を次々と試すこと
* ブルートフォース攻撃
パスワードに使われる文字の組み合わせを全パターン試すこと
### DoS攻撃
#### Dos攻撃とは？
短時間に大量のアクセスを行い、サービスを停止に陥れる攻撃のこと
#### SYN Flood攻撃
SYNパケットだけを大量に送りつけ、サーバーを待ち状態にさせること
#### F5攻撃
繰り返しアクセスし続けることで、Webサーバーの負荷を高める攻撃のこと

# 3. Webシステムの特徴を利用した攻撃
### セッションハイジャック
#### セッションハイジャックとは？
第三者が何らかの方法でCookieの中身やセッションIDを取得し、ログインすること
#### 考えられる対策
通信を暗号化したり、急に異なるIPアドレスから接続された場合、強制ログアウトを行うなど
### ディレクトリトラバーサル
#### ディレクトリトラバーサルとは？ 
Web公開ディレクトリより上の階層にたどっていき、公開されていないファイルを取得する
#### 考えられる対策
リクエストされたURLをチェックし、公開されていないファイルが指定されていないか確認

# 4. Webアプリケーションの脆弱性を狙う攻撃
### クロスサイトスクリプティング
1. 悪意のあるスクリプトを自動的に掲示板に書き込んでしまうリンクを表示する
1. 悪意のあるサイトのリンクにアクセスする
1. 悪意のあるスクリプトを掲示板に書き込むクライアントサイド・スクリプトが送られる
1. 意図せず悪意のあるスクリプトを書き込んでしまう
1. ユーザーから送信された書き込み内容をそのまま表示 (**脆弱性**)
1. 掲示板に表示された悪意のあるスクリプトがそのまま実行される
### クロスサイトリクエストフォージェリ
1. SNSなどに対して操作を行うようなリンクを表示する
1. 悪意のあるサイトのリンクにアクセスする
1. SNSの操作を行うクライアントサイド・スクリプトが送られる
1. 本人の意図しない操作(コメント投稿、パスワード変更など)を行なってしまう
### SQLインジェクション
DBが解釈できる内容を埋め込み、DBに意図しない動作を行わせる攻撃

# 5. Webシステムの脆弱性
### セキュリティホール
#### セキュリティホールとは？
　権限がないと本来できないはずの操作が権限を持たないユーザにも実行できてしまったり、見えるべきでない情報が第三者に見えてしまうような不具合のこと
#### セキュリティホールへの対策
ソフトウェア開発元が開発する**修正プログラム**を適用する。
### ゼロデイ攻撃
　発見されたセキュリティホールに対する修正プログラムが開発される前に、そのセキュリティホールを利用した攻撃を仕掛けること

# 6. ファイアーウォール
### ファイアーウォールとは？
　インターネットと内部ネットワークの間に設置し、送受信データを監視して通信の許可・拒否を行うもの
### パケットフィルタ型ファイアーウォール
送受信されたデータのIPアドレスとポート番号をチェックし、通信の許可 / 拒否の判断を行う

# 7. IDS、IPS
### IDS、IPSとは？
　ネットワーク上を流れる通信を監視し、不正アクセスと見られる通信や普段と異なる異常な通信を検知する装置のこと
### IDSとIPSの違い
#### IDS
異常があったことをメールなどでシステム管理者へ通知するのみ
#### IPS
通知のみでなく、即座に該当する通信の遮断を行う
### 不正アクセスの検知方法
#### シグネチャ型 (不正検知型)
事前に登録されたパターンと同じものを不正アクセスと判断
#### アノマリー型 (異常検知型)
普段の通信とは大きく異なる通信や通常は発生しないような通信を不正アクセスと判断

# 8. WAF
### WAF (Web Application Firewall)とは？
やりとりされるパケットの中身をみて悪意のあるデータが含まれていないかチェックする
※ セキュリティ効果は高いが、運用に手間やコストがかかるため導入には検討が必要
### ブラックリスト型とホワイトリスト型
#### ブラックリスト型
特定のパターンのデータを持つ通信を遮断する
#### ホワイトリスト型
正常なデータのパターンを持つ通信のみを通す

# 9. 暗号化
### 暗号化とは？
　元のデータ(平文)を暗号化の手段(暗号化アルゴリズム)で第三者の読み取れないデータ(暗号文)にすること
### 通信経路での暗号化
通信経路自体を暗号化し、第三者に通信を盗聴されても内容が読み取れないようにする
### 保存データの暗号化
サーバーにデータを保存する際に暗号化を行い、使用するときに復号する
### ハッシュ化とは？
ハッシュ関数と呼ばれる計算式で、固定長の長さの文字列(ハッシュ値)に変換を行うこと
パスワードによるログインなどで、よく利用される。

# 10. 公開鍵証明書
### 公開鍵証明書とは？
やりとりの相手が本物であることを証明するもの
認証局と呼ばれる第三者機関から発行される
### 公開鍵証明書の役割
1. HTTPS通信に使うための公開鍵の持ち主が誰なのかを証明
1. 公開鍵の持ち主が実在することを証明

# 11. 認証
### 認証とは？
会員制サイトを利用する際、本人確認ができればサービスを利用できるという仕組み

# 12. 認可
### 認可とは？
　認証によって確認した結果から、ユーザーごとの権限に従って利用できるサービスの許可を行うこと
### OAuth(オーオース)
　サイトをまたいだ許可を実現するために標準化されたプロトコル
　機能としては認可のみで、認証は行わないため、基本的に認証を行う他のプロトコルと併用して使われる

# 13. CHAPTCHA(キャプチャ)
### CHAPTCHAとは？
コンピュータと人間を区別するためのテスト
人間には容易に実施できるが、プログラムには困難な処理をさせる