最低限おさえておきたいWebサイトのセキュリティ対策 


PAK85_MBAdesagyou20140312-thumb-1000xauto-17014


SQLインジェクション

SQLインジェクションとは
データベースと連携したWebサイトに対して悪意のあるSQL文を埋め込み(Injection)データベースを不正に操作する。Webサイトから個人情報などが盗まれたり、注文情報を書き換えられたりといった被害を受ける場合がある。
対策
・SQL文の組み立てを文字列連結により行う場合は、エスケープ処理等を行うデータベースエンジンのAPIを用いてSQL文のリテラルを正しく構成する。(MySQLの場合はmysqli::real_escape_stringなどで対応)
・変数を埋め込んだSQL文(プリペアドステートメント,静的プレースホルダ)を使う。
・データベース関連のエラーメッセージを直接表示させると攻撃の手がかりを与えることになるので、利用者にはこれらのエラーメッセージは見せない。
・アプリケーションのデータベースアカウントに適切な権限を与える。権限が必要以上に高い場合、攻撃による被害が深刻化する恐れがある。

クロスサイト・スクリプティング(XSS)

クロスサイト・スクリプティングとは
悪意のあるコードを含むリンクを、普通のメールのように偽装したメールで送付し(掲示板などにリンクを貼るケースもある)、それをユーザにクリックさせることで、あなたの会社のWebサイト上で悪意のあるコードを実行させる。悪意のあるコードが実行されるとニセのページが表示され、そのページに個人情報などを入力させて情報を盗み取る。あなたのWebサイトはニセのページを表示するための踏み台に使用されるため、あなたの会社が間接的に加害者となり、お客様に迷惑をかけてしまうと社会的信用をなくし企業としての大きな損害となる可能性がある。
対策
・Webページに出力する全ての要素に対してエスケープ処理を施しておく。(例えばPHPの場合、htmlspecialchars()やhtmlentities()などの関数を利用する)
・URLを出力するときは「http://」や「https://」で始まるURLのみを許可する。「javascript:」の形式で始まるものは許可しない。
・<script>…</script>要素の内容を動的に生成することを避ける。
・HTTPのレスポンスヘッダのContent-Typeフィールドには「 Content-Type: text/html;charset=UTF-8」のように、文字コード(charset)を指定する。

クロスサイト・リクエスト・フォージェリ(CSRF)

クロスサイト・リクエスト・フォージェリとは
インラインフレームで表示されるサイトやイメージタグに悪意のあるコードを仕込んでおいて、第三者にそれを読み込ませる(表示させる)ことによって悪意のあるコードを実行する。例えば、1×1ピクセルといったほとんど目につかないインラインフレームに特定のサイト(攻撃者のサイト)にフォーム(個人情報など)を送信するJavaScriptが書かれたHTMLを仕込んでおき、それを第三者が表示した際にコードが実行され、情報を盗み取る。特に会員向けページなどがターゲットにされやすい(ログイン情報や会員情報などの個人情報を盗みやすいため)。
対策
・サイトに不正なコードが仕込まれないようにする。インラインフレーム等で他サイトを表示する場合、遷移先のサイトの安全性を確認する。
・他サイトの画像を使用する場合にも安全性を確認する。
・秘密のトークンなどをhiddenパラメータにセットしてPOSTメソッドで送信することで正しいやり取りが行われているかを確認し正しい場合のみ処理を実行する。
・Refererが正しいリンク元かを確認し正しい場合のみ処理を実行する。

ディレクトリ・トラバーサル

ディレクトリ・トラバーサルとは
入力情報にファイルパスが含まれている場合に「../」(ひとつ上のディレクトリ階層を表す)などをつけて送信することで、実際には公開されるはずのないファイルの内容を表示させたりする。
対策
・外部からのパラメータでWebサーバ内のファイル名を直接指定する実装を避ける。
・Webサーバ内のファイルへのアクセス権限の設定を正しく管理する。
・ファイルを開く際は固定のディレクトリを指定し、かつファイル名にディレクトリ名が含まれないようにする。open(dirname+basename(filename)) のような形でコーディングして、filename に与えられたパス名からディレクトリ名を取り除くようにする。

OSコマンド・インジェクション

OSコマンド・インジェクションとは
入力情報に悪意のあるOSコマンドを含めることで、Webサーバ上で不正にOSコマンドを実行する。Webサイトの改ざん、情報漏洩、踏み台にされて他サイトへの攻撃などのおそれがある。
対策
・シェルを起動できる言語機能の利用を避ける。例えばPerlのopen関数は、引数として与えるファイルパスに「|」(パイプ)を使うことでOSコマンドを実行できるためsysopen関数を利用する等。
・シェルを起動できる言語機能を利用する場合は、その引数を構成する全ての変数に対してチェックを行い、あらかじめ許可した処理のみを実行する。

セッション・ハイジャック

セッション・ハイジャックとは
セッションIDの推測(推測しやすいセッションIDの場合)、セッションIDの盗用(何かしらのトラップ、ネットワーク盗聴などにより)、セッションIDの固定化(攻撃者があらかじめ決めておいたセッションIDを振られるトラップにより)などの方法で利用者になりすまし、不正な操作を行う。ログイン後の利用者のみが利用可能なサービスの悪用、編集可能な情報の改ざん、閲覧可能な情報の閲覧などの脅威がある。
対策
・セッションIDを推測が困難なものにする。
・セッションIDをURLパラメータに格納しない。
・HTTPS通信で利用するCookieにはsecure属性を加える。
・ログインのたびに新しいセッションIDを発行し、古いセッションIDを無効化する。
・セッションIDを固定値にしない。
・セッションIDをCookieにセットする場合、有効期限の設定に注意する。(必要以上の有効期限を与えない)

さいごに

Webサイトのセキュリティ対策に関して代表的なものをまとめてみました。Webサイト開発の際に参考にして頂ければと思います。

シェアして頂けると嬉しいです

















チャーム本店



価格.com ブロードバンド

価格.com 自動車保険









■コメントはお気軽にどうぞ