HTML

インターネット概論
第9回12月11日
Webって、どんなシステム?
WWW

World Wide Web の略


語源:世界規模の蜘蛛の巣
世界中の情報を蜘蛛の巣状に関連付けた情報
ネットワークサービス
WWWの起源

1989年、CERN(欧州合同原子核研究機関)
で文書情報のやり取りを目的として開発された


互いに公開可能な情報を持っていたが、その情報
を円滑に共有しあう手段がなかった
Tim Berners-Lee氏が文書情報を簡単に共有で
きるシステムを開発した
関連付け(Hyper Link)

1989年に開発された情報共有機構の特徴

他のコンピュータにある情報に対してLinkを張れる
この情報は
こっちにあるよ
初期型WWW


NeXT社のSTEPでしか動作しなかった
考案者は仕様をインターネットで公開した


HTML言語など
瞬く間にみんなが作った

今日では、どんなOSでもWWWが見れる
Webを実現する
コンピュータネットワーク



WWWの普及には異種OS間通信の実現がある
ネットワーク上のプロトコルだけが決まっている
OSが違っていても通信可能




LinuxとWindowsでも通信できる
WindowsとMacでも通信できる
UnixとWindowsでも通信できる
どんなOSでもプロトコルに沿って通信をすれば通信
できる
通信プロトコル


「こういう風に聞いてきたら、こういう風に答えな
さい」みたいな決まりの集合
例えば、WWWでは、


GET /index.html HTTP/1.0
というと index.html というファイルの中身が見れる
プロトコル


プロトコル:議定書、条件などの原案
共通のコミュニケーションルール


全員が同じルールで通信をするのでお互いに理解が
可能
日本語と日本語だと理解し合えるが、日本語とスワヒ
リ語だと会話が成り立たない
インターネットとWWW

インターネットの通信プロトコルは公開されている


異種OS間で通信ができた
WWWのプロトコルも公開されていた


インターネットの代表的なアプリケーションになった
WWWは爆発的に広がった
WWWはWebサーバの集合体


インターネットは膨大な数のコンピュータが互い
に手を取り合う世界規模のネットワーク
Webサーバは個別にデータを持っている

私たちはWebサーバの一つ一つにアクセスしている
Webを構成する3つの重要な概念

URL: Universal Resource Locator


HTTP: HyperText Transfer Protocol


情報オブジェクト(リソース)の位置を記述するための
シンタックスあるいはその記述
トランスポートプロトコル
HTML: HyperText Markup Language

マークアップ(プレゼンテーション)記述言語
11
Webサーバの動作




WWW = ‘‘クライアント・サーバ’’ アプリケーション
Web ブラウザからのドキュメント取得要求を受け付
ける
個々の要求から必要なファイル(オブジェクト)や動
作を決定する
結果を送る
サーバ
Request
クライアント
Response
12
サーバ・クライアントプロトコル

HTTP



http://www.ics.uci.edu/pub/ietf/http
/draft-ietf-http-v10-spec-01.txt
Webのブラウザは、クライアントとして動く
Webは、他のインターネットアプリケーションも包
含する

FTP, Gopher, WAIS, NNTP and telnet
13
HTTPとHTMLの関係
HTTP
メッセージ
リクエスト
レスポンス
Request Line
Status Line
HTTP Headers
CRLF
Payload
(Entity Body)
HTTP Headers
CRLF
Payload
(Entity Body)
ペイロードがHTML
(ハイパーテキスト
ドキュメントの場合)
14
Webサーバとデータ形式

Web Server Knows:



HTTPのリクエストの受け付けかたと返事の仕方
サービスに必要なドキュメントの探しかた
Does Not Know:




ドキュメント間のハイパーテキストのリンクの意味
インライン イメージ
ドキュメントの作者が正しくMIMEタイプをつけている
か
ほかのWebサーバのこと(Proxyサーバは、唯一ほ
かのサーバも知っている
15
Webドキュメントのいろいろ

ドキュメントタイプ









HTML
Plain ASCIIテキスト
整形済みのドキュメント(PS)
静止画(GIF, JPEG)
音声(AU, AIFF)
動画像(Quicktime, MPEG)
3次元空間(VRML)
Java ‘applet’
...
16
HTTPにとってのWebドキュメント

どんなタイプのドキュメントもバイナリデータとし
て保管、転送される


ブラウザ側で正しく処理するためにタイプ情報を
用いる



Webサーバはドキュメントの内容に関知しない
データを送る前にデータに関する情報を送っている
タイプは、Content-typeを使って送る
サーバがタイプ情報を知る方法

ファイル名の拡張子からのマッピング
HTMLドキュメン: .html
 GIFフォーマット: .gif

17
タイプと拡張子

html, htm





PostScript
GIFイメージ
JPEGイメージ
wrl, vrml

VRMLシーン記述
TIFFイメージ
mpeg


Audio (Sun)
tiff


フォーマットなしASCIIテキスト
au


jpeg
txt


gif


HTML ドキュメント
ps


MPEGイメージ
java

JAVAアプレット
18
HTML





Hypertext Markup Language
WWWの基本言語
ブラウザは、必ず処理できなければいけない
Anchorをいれることができる
http://www.w3.org/hypertext/WWW/M
arkUp/html-spec/html-spec.ps.gz
19
外部プログラム

ブラウザの取り扱えない動作や知らないタイプ
の情報を扱う方法



helperプログラム
外部ビューワ
イメージや音の再生など
20
Content-Encoding

型(ドキュメントのタイプ)とは別に、データストリームのエン
コーディングをヘッダ中で指定することが可能
 圧縮がかけられているドキュメント
Content-type: application/postscript
Content-encoding: gzip
HTTPヘッダ
gzipで圧縮
されている
PSデータ
HTTPペイロード
21
HTTP: Hypertext Transfer
Protocol





単純なRequest/response
クライアントは、サーバとコネクションを設定する
クライアントがサーバにリクエストを投げる
サーバがリクエストにしたがってリプライを返す
TCP上で実装されていることが多い。
22
リクエスト (クライアントから
サーバへ)

HTTPリクエストの構成要素




Method: 可能な動作のうち一つ
URI: Universal Resource Identifier
プロトコルバージョン
(Optionally) その他の情報(ヘッダ情報)
23
URLと URI

3つの部分から構成されている




転送に用いるプロトコルの識別子
サービス(サーバプロセス)識別子
ドキュメントの名前
URI: URLのサブセット


サービス = サーバ名 + ポート番号 (TCP/IPの場合)
ドキュメント名 = ファイルシステム上のパス名
http://ds.internic.net:80/rfc/rfc1630.txt
メソッド
サーバ名+ポート番号
フルパス名
24
TCPポート80 !



HTTPのデフォルトポート番号: 80
http://www.server.org/sample.html (port 80)
http://www.server.org:8000/sample.html
(port8000)
25
HTTPメソッド = リクエストの種類


GET:
HEAD:





(e.g.: タイムスタンプ)のみを返し、オブジェクトそのものは返さ
ない。
POST:

オブジェクトを返す。つまり情報を引き出す。
オブジェクトに関する情報
サーバへデータを送る。
普通はスクリプトへの入力に用いる。
データの蓄積を目的としてサーバへデータ
を送る。
DELETE:
データを削除する。
Other
PUT:
26
クライアントからサーバに送る
(ヘッダ)情報

User-Agent


If-Modified-Since


キャッシュのファイルのタイムスタンプを送り、変更さ
れていた場合にのみファイルを受け取る
Accept


ブラウザ名
ブラウザが受け取れるMIME-type
Authorization

パスワードやその他の認証子
27
リクエストの例
GET /Staff/Funny/silly.html HTTP/1.0
User-agent: NCSA Mosaic for the X Window System/2.5
Accept: text/plain
Accept: text/html
Accept: application/postscript
Accept: image/gif
(Accept: */* )
28
レスポンス
(サーバからクライアント)

ステータス



要求が成功したか失敗したか
HTTP-version Status-code Reason
メタ情報

返送する情報の情報
コンテント・タイプ
 コンテント・エンコーディング


実際のデータ
29
HTTPのステータスコード (抜粋1)

200: Document follows


301: Moved Permanently


指定されたドキュメントは新しいURLに移動した
302: Moved Temporarily


リクエストは受け付けられた。続いてデータの転送が
行われる
指定されたドキュメントは一時的に新しいURLに移動
している
304: Not Modified

指定されたドキュメントは、リクエストのパラメータで
指定された日付より後に変更されていない
30
HTTPのステータスコード (抜粋2)

401: Unauthorized


403: Forbidden


アクセスは禁止されている
404: Not Found


情報へのアクセスは制限されており、正しい認証が
行われる必要がある
指定された情報が見つからないか、アクセス制限が
働いた
500: Server Error

サーバの内部エラーが発生した
31
HTTPトランザクション例
Telnet
リクエスト
is26e0s00[3] telnet shinoda-www.jaist.ac.jp 80
Trying 150.65.190.124 ...
Connected to shinoda-www.jaist.ac.jp.
Escape character is '^]'.
リクエストライン
GET / HTTP/1.0
CRLF
レスポンス HTTP/1.0 200 OK
(HTTPヘッダ+Entity Body = 空)
ステータスライン
Date: Sat, 30 Nov 1996 11:07:39 GMT
Server: Apache/1.1b2
Content-type: text/html
HTTPヘッダ (空)
Content-length: 975
Last-modified: Fri, 08 Nov 1996 07:28:11 GMT
CRLF
<HTML>
<HEAD>
<TITLE>Shinoda Lab. Home Page (In English)</TITLE>
</HEAD>
...
Telnet
</BODY>
</HTML>
Connection closed by foreign host.
32
ダイナミックドキュメント

CGI --- Common Gateway Interface




SSI --- Server Side Include



独立したプログラムが起動
リクエストの入力はプログラムの入力へ
プログラムの出力がクライアントに渡される
html中にコメントの形でプログラム実行を記述
プログラムの出力は、元のドキュメントに埋め込まれる
Other


サーバ拡張API: NSAPI, Apache Modules, ...
Remote Program Execution: Java, JavaScript,
mBED...
33
WWWサーバ: 基本中の基本

GET methodのみを処理する簡単なWebサー
バ






コネクションを受け付ける
リクエストラインを入力し、URI(パス名)を取り出す
適当なステータスラインとヘッダを出力する
URIで指定されたオブジェクトを出力する
掃除をしてから最初に戻る
もっともコンパクトなサーバの大きさはどれくらい
か
34
#!/usr/local/bin/perl
use IO::Socket;
sub endProg () {
$sockNew->close ();
$sock->close ();
$sock = new IO::Socket::INET (LocalAddr =>
"localhost:8007", Listen => 5);
exit;
die "can not create socket : $!\n" unless $sock;
}
$sockNew = $sock->accept ();
sub errMsg () {
$message = <$sockNew>;
$date = `date`;
$message2 = <$sockNew>;
print $sockNew <<ERRMSG
print $message;
HTTP/1.0 404 Not Found
Date: $date
chop $message;
Server: SIMPLE SAMPLE SERVER (Unix)
@msg = split (" ", $message);
Connection: close
Content-Type: text/html
if ($msg[0] eq "GET") {
if ($msg[2] eq "HTTP/1.0") {
open (FILE, $msg[1]) || &errMsg();
ERRMSG
while (<FILE>) {
&endProg();
print $sockNew $_;
}
close (FILE);
}
}
ERROR MESSAGE
}
WWW

Webサーバに問い合わせることにより実現
この情報
見せて
DATA
表示
DATA
Java、ActiveXなど

WWW上で動作なども記述できるようになった


WWWの用途の多様化
しかし、できることが多くなった分、セキュリティ
ホールも増えた

無防備に使っていると問題が発生する事もある
WWWまわりで危険なこと




知らないうちに個人情報を抜き取られる
知らないうちにウィルスに感染する
手元のコンピュータが停止させられる
ウィルスに感染し、自分自身が知らない間に加
害者になっている
WWWでサーバに送信される情報

実は、WWWクライアントからもサーバに情報は
送信されている




クライアントのIPアドレス
WWWブラウザの種類
直前まで見ていたWWWページの場所
その他
それらからわかること

例えば、REMOTE_HOSTが
「paexxxx.tokyont01.so-net.ne.jp」だった場合

WWWページを見にきた人は





SO-NETに入会している
東京から接続している
フレッツISDNユーザである
といった感じのことがわかります
例

http://www.sfc.wide.ad.jp/InternetGairon2001/printenv.cgi
自分のマシンのIPアドレスがば
れて何が嫌か?


例えば、WWW上の掲示板などで悪態をついて、
恨みを買ったとする
自分のIPアドレスがばれると、恨みを持った人達
が徒党を組んで攻撃してくる


不正進入を試みたり
DoSアタックをかけたり
DoS(Denial of Service)


サービスを中断させる
簡単なDoS

パケットを大量に送信する


防ぐことが難しい
例えば、128kpbsの回線に100Mbps分のパケッ
トを送信する

回線は混雑しすぎて何もできなくなる
IPアドレスが分かってしまう問題
対応策




IPアドレスを分からないようにすることは、“基本
的には出来ない!!”
信頼できそうもないようなWebサーバにはアクセ
スしない
他人に迷惑や不快な思いはさせない
システムとしては、分からないような情報を不用
意に入力しない
ソフトウェアのバグ


ウィルスなどはソフトウェアのバグを利用してい
る
全てのソフトウェアにはバグがある



中には悪用できるものもある
本来あり得ない情報を送り込むことでユーザ情報を
取得する
ページを見るだけでシステムハングアップさせる
バグ


ソフトウェアのバグの修正プログラムの多くは配
布されている
しかし、修正プログラムを使わない人も多い

皆様 Windows Update してますか?
IEのバグを悪用した例

IEの新しいウィンドウを数千個(もしくは無限に)
出す


メモリがなくなって、システムが止まってしまう
「このページは見てはいけません」と書いたリン
クを作ってそれをクリックした人がはまる
Java, javascript, activeX

便利な機能を備えている


HTMLだけでは実現できないことができる
しかし、危険も伴う

得体の知れないファイルを勝手にダウンロードされて、
実行される

ウィルスを注入される
防衛策



「インターネットオプション」の「セキュリティ」項目
でセキュリティレベルを「中」以上にする
セキュリティレベル「低」は使わない
やばそうな場所を見るときには「高」にする
その他の危険


WWWを見なくても、ネットワークに接続している
だけでも侵入される
ネットワークにつながるということは、他のマシン
もこちらを見れるということ
インターネットにつなげているだけ
で進入される例

Nimdaなどのワームに攻撃される



IISというWWWサーバをWindows上で起動している
と侵される
IISは、マイクロソフトの特定のソフトウェアをインス
トールすると勝手にインストールされるので注
意!!!
研究室に対する攻撃数

Nimdaだけで、大体、1日8000件ぐらい
Nimda




IIS、メール、共有、WWW閲覧などを通じて感染
マイクロソフトの Well Known セキュリティホー
ルを惜しまず使ったウィルス
自己増殖型ウィルス
万能型ウィルス
Nimda

Nimdaに感染すると、数万個のホストからIISが
起動しているものを探し始める




大量にWWWコネクションを張りにいく
IISを発見するとセキュリティホールをついて侵入を試
みる
成功すると自分自身をコピーする
侵入されたホストは、また、インターネット上のIISを探
し始める
Nimda



Nimdaは、ウィンドウズの「共有」も利用する
感染すると、同じセグメントのマシン全部を攻撃
し始める
攻撃が成功すると自分自身を対象のホストにコ
ピーする
Nimda



Outlookも利用する
Nimdaに感染すると、アドレス帳上のメールアド
レスに対してウィルスを添付して送信する
メールを受け取った先がOutlookでメールを読ん
でいると、感染する
Nimda


NimdaにやられたマシンがWWWサーバだった
場合、WWWページにウィルスが仕込まれる
WWWページを古いIEで見ると見た人が感染す
る
まとめ


こまめにWindows Updateをする
自分が通信できるということは、他人も自分のと
ころまで通信できるということであることを忘れな
い


注意を怠らない
インターネットは匿名性があると言われるが、必ずし
もそうとは言い切れない