何者にもなれていない5年目のエンジニアブログ

ありがちなWeb site攻撃方法とその対策

代表的なものが三つある。どんな教科書にも書いてありますが

①. CSRF
②. SQLインジェクション
③. クロスサイトスプリプティング

CSRF

CSRFとは:クロスサイト・リクエスト・フォージェリーとは、攻撃者が、特定のサイト(攻撃対象)に意図しないデータを送信するようなページを用意し、利用者がそのページにアクセスすると攻撃者が用意したデータが利用者の意図に関わらず、自動的特定のサイトに送信されてしまう攻撃のことを指す。

CSRFの対策:鍵を用いることで対策を行う。鍵を持っていないリクエストは認めず、また、鍵は容易に偽造できないようなものとする。偽造ができないようなデータを鍵としてリクエストフォームに埋め込んでおき、受け取る際はその鍵の提示が必要であるような受信プログラムを作成する。鍵を作るための方法は、一方向性関数(Digest::SHA1)を用いるといった方法がある。

②.SQLインジェクション

SQLインジェクションとは:SQLインジェクションは、プログラム内で期待している値がデータであるにも関わらず、入力データをSQL ステートメントとして解釈してしまい、本来参照することのできないデータベース内の情報(テーブル名など)を得ることができてしまうなどといっ動作を指す。

SQLインジェクションの対策: ・入力データを完全に「データ」として扱い、ステートメントとして扱わないようにプログラムを記述する。 プレイスフォルダーはデータとして扱われ、ステートメントとしては扱われないため、DBI モジュールのデータベースハンドラの parepare()メソッドに指定する SQL 文中に、"?"を含め、それをプレイスフォルダーとして扱う。

③クロスサイト・スプリプティング

クロスサイト・スプリプティングとは:利用者に信頼されているであろうサイトや有名なサイトのネームバリューを悪用し、攻撃者がそのサイトに JavaScriptや入力フォームなどの悪意のあるコードを埋め込むことで、プライバシー情報を盗みだすこと。 クロスサイトスプリプティングの対策:クロスサイトスクリプティングは、HTMLを他のサイトに送信することで成立するため、送信されてくる HTMLデータをサニタイジングかスクラビングすることで防げる。 スクラビングは、HTML::Scrubberを使用し、すべてのタグを削除するといった方法を用いる。また、サニタイジングは、escapeHTML()を使用し、特殊文字を無力化させるといった方法を用いる。