セキュリティー周りに関して、書籍や(FWを使わない)PHPのコーディングを通して学習していたものの、知識が中々頭に入ってこないな。。という実感がありました。
そこで、「プロになるためのWeb技術入門」をベースとして、代表的とされる攻撃手段と、対策について整理してみました。
代表的な攻撃手段
1. SQLインジェクション
2. XSS
3. セッションハイジャック
4. CSRF
5. 強制ブラウズ
6. ディレクトリトラバーサル
7. nullバイト攻撃
これら7つについて説明します。
1.SQLインジェクション
対策
①バリデーションを設定する →ex)半角英数字のみを受け付ける
②プリペアード・ステートメントの利用
▼プリペアード・ステートメントとは
SQLのテンプレートのようなもので、後からパラメーターを割り当てる事になります
詳細は、こちらの記事が詳しく説明されています
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対策と同じ)
②ユーザーから入力されたパラメーターをそのままファイル名としないようにする
(有効な手段)
代表的な攻撃手段について、以上となります。
概要のみ取り上げましたが、一つ一つの内容が奥深そうで、より知っていきたいなと思いました。
コメント
[…] […]