ノリブログ?

不特定ユーザ投稿型WebアプリケーションにおけるHTMLタグの制限

カテゴリー:HTML & CSS

不特定の人が投稿をすることができるWebアプリケーション(代表的な例では掲示板など)ではHTMLタグの使用を許可すると
ブラウザクラッシャーを組み込まれたり、フレームやフォームをつかって悪意のある外部サイトへの誘導されたりする可能性があります。
しかしすべてのタグを禁止してしまうとアプリケーションによってはユーザが不便になる場合もあります。
そこで危険のあるタグを制限する例をいくつかあげてみます。

◯imgタグ
---問題点---
タグ内にsrc="file:///c:/con/con/con.con"
Windows 9x系のマシンが停止するためブラウザクラッシャーに利用される。

タグ内にsrc="mailto:001@example.org"
メールウィンドウが勝手に開くためブラウザクラッシャーに利用される。

タグ内にsrc="file:///A:/example.002"
フロッピーディスクドライブにアクセスさせようとする、ブラウザクラッシャーに利用される。

その他にもimgタグを許可しておくとWebビーコンに利用される可能性がある
Webビーコンについては下のアドレスを参考
参考 
@IT
http://www.atmarkit.co.jp/icd/root/96/92582496.html

「Webバグは悪玉じゃない」、米ダブルクリックがブロック機能に反論:
ITpro
http://itpro.nikkeibp.co.jp/free/NC/NEWS/20040929/150540/

---対処方法---
imgタグの使用は基本的にできないようにしておく。
ユーザに画像を投稿させる機能をつけたい場合はアプリケーションにアップローダ機能をつけアプリケーションを置くサーバにアップされた画像のみ表示させるようにすることで上の問題を回避できる

◯script,object,appleタグ

---問題点---
Java Scriptなどのプログラムを使い無限ループ、クロスサイトスクリプティングを用いたフィッシング詐欺などの利用される可能性がある。

---対処方法---
投稿文にjavascriptの開始タグがあれば一部分を置換するなどしてjavascriptのコードを書けないようにしておく。
javascriptの開始例には以下のようなものがある。
<script type="text/javascript">
<script language="JavaScript">
又onload,onclickのようなイベントハンドラをタグ中に入れることで実行することができる。よってこのイベントハンドラとなるものをすべて書けないようにしておく必要がある
イベントハンドラには以下のようなものがある。(javascript 1.3)
onAbort
onBlur
onChange
onClick
ondragdrop
onError
onFocus
onkeydown
onkeypress
onkeyup
onLoad
onmousedown
onMouseOut
onMouseOver
onmouseup
onmove
onReset
onresize
onSelect
onSubmit
onUnload






◯tableタグ
---問題点---
サイトデザインをtable構成で行っている場合、</table>などの投稿をされた場合デザインが崩れる。

---対処方法---
1.tableタグそのものを使えないようにする
2.<table>タグと</table>タグの位置が一致しない場合に自動的に</table> タグを挿入するようにする。

◯styleタグ
---問題点---
スタイルシートを使って文字サイズを極端に大きくしたりと意図しない使われ方をする可能性がある。

---対処方法---
スタイルシートタグを使えないようにしておき、スタイルシートが外部ファイルのみでコントロールする。

◯HTMLヘッダー関係タグ(html,head,meta,base,body)

---問題点---

HTMLヘッダーを変更されてしまう可能性がある。
---対処方法---
HTMLヘッダー関係のタグは使用をできないようにしておく。

◯フレームタグ(frame,iframe,frameset)
---問題点---
フレームを使い外部のサイトを呼び出されてしまう可能性がある
---対処方法---
HTMLヘッダー関係のタグは使用をできないようにしておく。

◯linkタグ
---問題点---
制作者が意図しない外部のファイルを読み込ませられるおそれがある。

---対処方法---
linkタグは使用をできないようにしておく。


◯formタグ

---問題点---
フォームを勝手に埋めこまれて、ボタンなどで危険なURLに誘導されてしまう可能性、
ページ観覧者が意図しないまま情報を不特定の人に与えてしまう可能性などがある。

---対処方法---
formタグは使用をできないようにしておく。

◯embed、bgsoundタグ

---問題点---
ページに音楽や動画などを


上に書いたようなタグは最小限のものです。
アプリケーションの目的によって安全かつ利便性があるように
使用できるタグをコントロールすることが必要です。
◯参考
TRUSNET:セキュアプログラミング
http://www.trusnet.com/secinfo/docs/webprog1/index.html

関連記事

Track Back URL

name
E-mail(省略可)
URL(省略可)
コメント