あなたのWebサービスは狙われている!最低限押さえておきたいセキュリティ対策

あなたのWebサービスは狙われている!最低限押さえておきたいセキュリティ対策

よっしー

よっしー

最近上京してきたんだけど、入谷から会社までくるのに徒歩10分の道のりで迷子になっちゃって、なんか知らない間に浅草の方まで行っちゃって、会社に遅刻しちゃって、東京ってマジ迷路だよね。あ、どうも、僕です。

今日はWebサービスを開発する上で最低限おさえておきたいセキュリティ対策について書こうと思うよ!

セキュリティホールって、
案外簡単な見逃しでできちゃうんだよね。

バリバリのハッカーしかハッキングなんてしないから、
うちのサイトは安全だなんて思ってたら大間違いだよ!

今回は、その攻撃方法と、
それを防ぐための対策方法をセットにして書こうと思うよ!

最低限、これだけは守っとかないと、
あなたのWebサービス、攻撃されちゃうよ!

ちなみに、言語はPHPを例とするよ!
ほかの言語にも当てはまるから、
攻撃方法と対策をセットで頭に入れておくこと!

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

よくきくよね!
よくきくよねクロスサイトスクリプティング!

クロスサイトスクリプティングって言うのは、第三者がユーザに悪意のあるコード(JavaScriptなど)を含む特定のリンクを踏ませることで、任意のコードを実行させる攻撃です。

攻撃方法

クエリに悪意のあるコードを含むリンクを、普通のメールのように偽装したメールで送付し、それをユーザにクリックさせることで、あなたのWebサービス上で悪意のあるコードを実行させる。要は、攻撃の踏み台にされるということ。スパムメールなんかはほとんどこれと言っても過言ではない。そう。過言ではないのだ。

対処方法

クエリやフォームなど、ユーザが入力するデータを画面に表示する場合には、htmlspecialchars()やhtmlentities()などの関数でHTMLエスケープしてから表示する。

スクリプトインジェクション (Script Injection)

これもよくきくよね!

スクリプトインジェクションとは、サイト内にJavaScriptを埋め込む攻撃方法です。

こっちはもっと単純!

攻撃方法

掲示板など、ユーザの入力情報を表示するサイトに、悪意のあるコードを記述した投稿をすることで、それを閲覧したユーザに任意のコードを実行させる。これも、攻撃の踏み台にされること。

対処方法

クエリやフォームなど、ユーザが入力するデータを画面に表示する場合には、HTMLエスケープしてから表示する。

SQLインジェクション (SQL Injection)

これも超きくよね!

知らない人いる!?
開発者でSQLインジェクション知らない人いる!?

いた!
ぼく!

SQLインジェクションとは、
データベースの問い合わせを乗っ取る攻撃方法です。

攻撃方法

ユーザの入力情報を使ってデータベースなどを検索するシステムに対し、悪意のあるSQL文を含むコードを入力することで、任意のSQLを実行すること。

対処方法

ユーザの入力情報を使ってデータベースなどを検索する場合、入力情報をSQLエスケープする。MySQLの場合はmysqli::real_escape_stringなどを使います。または、プリペアドステートメントといって、変数を埋め込んだSQL文を使うとか。プリペアードステートメントの使い方はここを参照してね!

セッションハイジャック

これもよくきくよね!

第三者のセッションを乗っ取って、個人情報とか盗んだり、
アカウントを乗っ取って悪意のある行為をしたりすることだよ!

攻撃方法

セッションはユーザのPC上にCOOKIEなどにユーザを一意に識別する値を保存することで実現している。攻撃者はユーザのCOOKIEに保存されているセッションの値を前述の方法などを用いて盗み取り、自分のCOOKIEの値を書き換えることによってそのユーザに成り済まし、悪意のある行為を行う。

対処方法

対処方法としては完璧ではないが、COOKIEに保存したセッション情報の有効期限を設けたり、ワンタイムセッションと言って、リクエストごとにセッション変数の値を変える方法がある。

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

きいたことある!?
きいたことあるクロスサイト・リクエスト・フォージェリー!
まず言いにくい!

かんじゃうよね!
まず言えないよね!

3回言ってみてよクロスサイト・リクエ、攻撃方法いきまーす。

攻撃方法

攻撃者はインラインフレームやイメージタグに悪意のあるコードを仕込み、第三者にそれを読み込ませることによって任意のコードを実行する。例えば、1×1ピクセルのインラインフレームに特定のサイトにフォーム送信するJavaScriptを含んだHTMLを仕込んでおき、それを第三者に読み込ませることによって、情報を盗み取る。

対処方法

対処方法としてはワンタイムトークンでリクエストとレスポンスを管理するか、固定トークンを使うなどの方法があげられる。それ以前に、サイトに不正なコードが生み込まれないよう対策を行うべきだ。インラインフレームで他のサイトを読み込む際、とび先のサイトは安全か。他のサイトの画像ファイルを貼付ける場合、そのリンクは安全かを確認すべきだ。

ディレクトリ遡り攻撃

何それって感じだけど、とっても単純で危ない攻撃方法なんだよね。
ファイルを扱うサービスは要注意だよ!

攻撃方法

ファイルパスを含む入力フォームに「../」をつけて送信することで、親ディレクトリのファイルパスまで遡り、サイト管理者が予期しないパスのファイルを表示させたりする。

対処方法

入力フォームにファイルパスを含む場合、「../」という文字列が含まれていないかチェックする。

まとめ

今回紹介した攻撃方法とその対処方法は以下の通り!

  • クロスサイトスクリプティング
  • スクリプトインジェクション
  • SQLインジェクション
  • クロスサイト・リクエスト・フォージェリー
  • セッションハイジャック
  • ディレクトリ遡り攻撃

ハッキングって敷居が高そうだけど、
意外と簡単に攻撃できてしまうことがお分かりだと思う。

そして、サイト開発者は、常にこれらの危険にさらされているということを意識しなければいけないのだ。

ちなみに、攻撃方法はここにあげたのが全てではないし、これからも新しい手法がどんどん開発されていくものなのです。

だから、開発者は最新のセキュリティ対策を心がけるようにしようね!

以上、よっしーでした!

関係ないけど、ローラのOKOKは、
ちまたでもっとはやっていいと思う。

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

どうも僕です!ジェイさんのエンジニア募集のツイートを見て、のこのこと面接にきて採用されたのが僕だ。Twitterは気軽にフォローしてね!「@mas_yda」僕は寂しがってますよ!もう一度言う。僕は寂しがってますよ!関係ないけど、石原さとみっていいよね。

このメンバーの記事をもっと読む