【Web技術】代表的な攻撃手段とその対策【セキュリティー入門】

Web技術

セキュリティー周りに関して、書籍や(FWを使わない)PHPのコーディングを通して学習していたものの、知識が中々頭に入ってこないな。。という実感がありました。

そこで、「プロになるためのWeb技術入門」をベースとして、代表的とされる攻撃手段と、対策について整理してみました。


代表的な攻撃手段

1. SQLインジェクション
2. XSS
3. セッションハイジャック
4. CSRF
5. 強制ブラウズ
6. ディレクトリトラバーサル
7. nullバイト攻撃


これら7つについて説明します。


1.SQLインジェクション

対策

①バリデーションを設定する →ex)半角英数字のみを受け付ける

②プリペアード・ステートメントの利用

▼プリペアード・ステートメントとは
SQLのテンプレートのようなもので、後からパラメーターを割り当てる事になります

詳細は、こちらの記事が詳しく説明されています

mysqliのプリペアドステートメント | GRAYCODE PHPプログラミング
mysqliはプリペアドステートメントをサポートしています。このプリペアドステートメントとは一体何か、使うメリットを、実際のコードを使って解説します。

O/Rマッピングを採用しているFWには予め組み込まれています

2.XSS

クロスサイトスクリプティング(cross site scripting)の略

対策

①サニタイジング の処理を行う

②< > @ “ などの記号を 「&It;」などの特殊文字に置き換える
HTMLやSQLでは無害化されてしまう
→FWに同様の機能が予め組み込まれている場合が多いです

3.セッションハイジャック

第三者がセッションを不正に取得する→不正利用で「乗っ取られる」状態となる

対策

①XSS対策

②SSLによって通信路を暗号化
→HTTPS化(=常時SSL化)します

③セッションの持ち時間を短くする(セッションタイムアウト値の変更)
→但し、ログイン画面に戻ってしまう時間が短くなる為、ユーザーにとっての使いやすさとトレードオフとなります

④セッションIDのランダム化
→推測されにくいようにする
※言語側で対応している部分だそうです。。

4.CSRF

クロスサイトリクエストフォージェリ(Cross Site Request Forgery)の略

攻撃者がIDPW知らなくても攻撃できてしまう事ができるのが怖いです

対策

フォームが自分のサーバーから生成されたものであるかをチェックするようにします

その為、HTMLのフォームタグ内のvalueにワンタイムトークンを埋め込んでおく必要があります
(hiddenとして表からは見えないようにします)

5.強制ブラウズ

ログイン後に表示されるページのURLを直に打ち込み、アクセスすることで悪用してしまうこと

対策

未ログインであればログイン画面になる設計にします

また、Index(下の画像左側のような画面)を表示させないようにする

6.ディレクトリトラバーサル / nullバイト攻撃

見られないはずの(隠されている)ファイルの中身を見ようとする

アプリケーション側で.htmlを文字列結合すること(.htmlとついているファイルじゃないと表示されないようにする)により対策できる…かのように見えますが、
アドレスバーに¥0のような文字列を入力するとこの対策も無効化されてしまいます。。

このことを、nullバイト攻撃といいます

対策

①/や¥などの記号をサニタイジングする(先に書いたXSS対策と同じ)

②ユーザーから入力されたパラメーターをそのままファイル名としないようにする
(有効な手段)


代表的な攻撃手段について、以上となります。

概要のみ取り上げましたが、一つ一つの内容が奥深そうで、より知っていきたいなと思いました。

コメント

タイトルとURLをコピーしました