9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

最低限のセキュリティ対策(WEB)

Last updated at Posted at 2016-12-03

不正アクセス画像

引用/参考書籍

「Webアプリエンジニア養成読本」

最低限のセキュリティ対策(WEB)

WEBアプリを制作する上で最低限気を付けなければ

ならないセキュリティについての学習です。


不正なアクセスやトラブル、またユーザの操作

によって第三者に被害を与えてしまうことを防ぐ、

セキュリティの確保がWebアプリにも必要です。

ここで、代表的なセキュリティホールを2つほど

紹介し、対策を考えていきます。

ちなみに運用時のサーバにおけるセキュリティ

対策も必要ですが、今回は触れません。

XSSの概念と対策

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

ユーザがフォームなどで情報を入力する

Webアプリがあり、入力→送信されたデータを

再びユーザにHTMLとして描画する際に

不適切な処理を行っている為に

何かしらの攻撃に繋がってしまうことを

指します。

最も顕著なのが、

他人のWebサイトへ、悪意のあるスクリプトを埋め込むこと。

JavaScriptのコードが埋め込まれているテキスト

を「そのまま」HTMLとして描画すると、

意図せず実行されてしますケースです。

開発者側としてはマークアップされていない

文章をフォームに入力してもらいたいはずが、

そこにJavaScriptのコードが書かれていたら

どうでしょう。

JavaScriptが実行されることを応用すると、

ブラウザに保存されているクッキーの値を取得したり

表示を強制的に書き換えたり、勝手にデータを送信

したりという可能性があります。

セキュリティホール①

「危険」なのでXSS対策を行う

基本的には、ユーザーから投稿されたテキスト

に書かれたHTMLのタグを実行させないために、

文字列をサニタイジング(エスケープ)させます。


※サニタイジング:入力データの無害化。

※エスケープ:特殊文字を適切な文字列に置換。


たとえば、

HTMLではタグを**< **と** >**でくくりますが、

それらを文字参照を使い**&lt;&gt;**に変換

させてやるのです。

するとWebブラウザはタグと解釈はせずに、

**< **と** >**を表示してくれます。

HTMLサニタイジングは、Webアプリケーション

フレームワークの「テンプレート」という

機能にデフォルトで導入されていて、

とくに意識せずとも「勝手に」サニタイジング

されていることが多いですが、

それに頼るだけでなく、XSSの原理と

対策を把握しておくことが大事。


自分でやるには、まず前提として

「サーバーサイドのプログラム言語(PHP、Ruby等)」

を使える事が必要です。


具体的な対策のやり方

ユーザーが入力した値(テキストやaタグ(URL)、imgタグ(画像)に対して)

をそれぞれのプログラム言語に

用意されている。関数に通せば済みます。

例としてPHPとRubyの関数を紹介します。

PHP

htmlサニタイズ
htmlspecialchars($str, ENT_QUOTES, UTF-8);
a,imgタグ
if (substr($_POST['url'],0,10) == "javascript:") {
  die("Illegal URL!\n");
}

Ruby

htmlサニタイズ
sanitize(文字列 [, tags => "許可するHTMLタグ名", attributes => "許可するHTML属性名"])

CSRFの概念と対策

CSRFはクロスサイトリクエストフォージュリ

の略で、悪意ある人がユーザに被害を与える

攻撃方法です。

攻撃を受けた場合、勝手に掲示板へ書き込み

をしたり、クレジットのオンライン決済を

したりという可能性があり「危険」です。

セキュリティホール②

CARFを防ぐ為に、一つは、

フォーム表示する際、type属性の値が

hiddenであるinput要素の値に、

セッションIDなどの攻撃者が知り得ない

秘密の文字列を入れて、webアプリ側で照合することです。

XSSと同じく、フレームワークが対策用の

機能、ライブラリを提供しているので、

実装する場合はそちらを使うとよいです。


※「hiddenフィールドは画面には表示されず,

 複数のWebページ間でデータの受渡しを

 行う際に利用されるHTMLフォーム項目である。」


わたしのような個人制作者は、セキュリティの部分

など、疎かにしてしまいがちです。

自分で注意し、自分や第三者が困る事のないよう

心掛けたいところです。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?