一般的なWebサイトのセキュリティ(少しだけ)

制作側である自分も構築時に、セキュリティには気を使っているのですが
備忘録として記載しています。

// —————————————————————————-
// XSS : クロスサイトスクリプティング
// —————————————————————————-

攻撃者の用意したフォームから悪意のあるスクリプトを割り込ませて
ユーザーのクッキー情報や入力情報を攻撃者に送ったり
意図しない書き込みをさせられたりする可能性。

フォーム値は、入力内容を精査、制限を設け、プログラム上
意味のある特殊文字を文字参照形式に書き換える事によって
プログラムとして実行されないようにすることで防御する。

(例)特殊文字を HTML エンティティに変換
<script> => &lt;script&gt;

// —————————————————————————-
// CSRF : クロスサイトリクエストフォージェリ
// —————————————————————————-

攻撃者の用意したページから攻撃対象となる脆弱サイトへ
意図しないデータを送るという仕組み。
サイト設置したフォームに、割り込み送信されてしまう可能性。

対策には、記入フォーム表示時に「トークン」を発行しておくこと。
「トークン」は複雑に作成し、アクセス毎に変更する。

表示前に作成した「トークン」をフォーム受信時に確認、
「トークン」が合致した場合のみ処理を行えば
外部から送信された、悪意のある値は受け付けないので安全になる。

// —————————————————————————-
// SQLインジェクション
// —————————————————————————-

フォーム値にSQL文を割り込ませて、データベース内のデータを吸い上げたり
ユーザーの乗っ取りを行う攻撃。

対策として一番目はXSSと同じで特殊文字をエスケープすること。
入力されたフォーム値を、全て鵜吞みでデータベースに保存するのではなく
取得内容と、取得値の関連が合致しているか細かくチェックすること。

(例:性別フォーム) 「男性」or「女性」しか選択が無い場合に「子供」は受け付けない仕組み。
(例:文字数チェック) 設定文字数を必ずチェックする。

// —————————————————————————-
// クリックジャッキング
// —————————————————————————-

一般的な攻撃方法は、攻撃者が作成したページに「iframe」でサイトを埋め込まれ
透明なボタンを上から被せられたり、ボタンの動作をJSで上書きされ
別の悪意のあるサイトへ、訪問ユーザーが誘導されたり、サイト情報が破壊されて
しまったりする攻撃。

この攻撃で一番シンドイのは、確実にサイトの信頼が失われてしまうことです。

対策としては数種あり、「.htaccess」に「Header set X-FRAME-OPTIONS “DENY”」と記載したり
「PHPのヘッダー出力」に「header(‘X-FRAME-OPTIONS:DENY’)」の設定、またはHTMLヘッダーに
「<meta http-equiv=”X-FRAME-OPTIONS” content=”DENY”/>」も効果は同じ。

// —————————————————————————-
// ブルートフォースアタック : 総当たり攻撃
// —————————————————————————-

別サイトからサイトに向けて、昨今のPCスペックで
力任せに数百から数千回アクセスし、パスワードの盗み出したりする攻撃

単純な攻撃ですが、ログインページなどが標的で
ログイン間違いの制限が設定されておらず
連続アタックできるサイトが被害を受けてしまいます。

CSRF対策の「トークン」の設置や3回連続してログイン失敗した場合
トップページにリダイレクトさせる等、対策が必要です。

その他、JSのみでのフォーム送受信は、近年 Ajaxの利用で増えてきていますが
脆弱になりやすく、また、サーバ内にセキュアな環境を構築するのには
大変な知識と労力が必要になります。

MIT形式のダウンロードJSなどは、手の内が一般公開されてますので
脆弱箇所が露見されていて、危険度は増しているように思います。

残念なことに、年々、セキュリティを脅かす方法は進化し増えていってるようです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です