インターネット概論 第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 インターネットの通信プロトコルは公開されている WWWのプロトコルも公開されていた 異種OS間で通信ができた インターネットの代表的なアプリケーションになった WWWは爆発的に広がった
WWWはWebサーバの集合体 インターネットは膨大な数のコンピュータが互いに手を取り合う世界規模のネットワーク
Webを構成する3つの重要な概念 URL: Universal Resource Locator 情報オブジェクト(リソース)の位置を記述するためのシンタックスあるいはその記述 HTTP: HyperText Transfer Protocol トランスポートプロトコル HTML: HyperText Markup Language マークアップ(プレゼンテーション)記述言語
Webサーバの動作 WWW = ‘‘クライアント・サーバ’’ アプリケーション Web ブラウザからのドキュメント取得要求を受け付ける 個々の要求から必要なファイル(オブジェクト)や動作を決定する 結果を送る サーバ Request Response クライアント
サーバ・クライアントプロトコル HTTP Webのブラウザは、クライアントとして動く Webは、他のインターネットアプリケーションも包含する http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-v10-spec-01.txt Webのブラウザは、クライアントとして動く Webは、他のインターネットアプリケーションも包含する FTP, Gopher, WAIS, NNTP and telnet
HTTPとHTMLの関係 Request Line Payload (Entity Body) HTTP Headers Status Line HTTP メッセージ リクエスト レスポンス CRLF ペイロードがHTML (ハイパーテキスト ドキュメントの場合)
Webサーバとデータ形式 Web Server Knows: Does Not Know: HTTPのリクエストの受け付けかたと返事の仕方 サービスに必要なドキュメントの探しかた Does Not Know: ドキュメント間のハイパーテキストのリンクの意味 インライン イメージ ドキュメントの作者が正しくMIMEタイプをつけているか ほかのWebサーバのこと(Proxyサーバは、唯一ほかのサーバも知っている
Webドキュメントのいろいろ ドキュメントタイプ HTML Plain ASCIIテキスト 整形済みのドキュメント(PS) 静止画(GIF, JPEG) 音声(AU, AIFF) 動画像(Quicktime, MPEG) 3次元空間(VRML) Java ‘applet’ ...
HTTPにとってのWebドキュメント どんなタイプのドキュメントもバイナリデータとして保管、転送される Webサーバはドキュメントの内容に関知しない ブラウザ側で正しく処理するためにタイプ情報を用いる データを送る前にデータに関する情報を送っている タイプは、Content-typeを使って送る サーバがタイプ情報を知る方法 ファイル名の拡張子からのマッピング HTMLドキュメン: .html GIFフォーマット: .gif
タイプと拡張子 html, htm ps gif jpeg wrl, vrml txt au tiff mpeg java PostScript gif GIFイメージ jpeg JPEGイメージ wrl, vrml VRMLシーン記述 txt フォーマットなしASCIIテキスト au Audio (Sun) tiff TIFFイメージ mpeg MPEGイメージ java JAVAアプレット
HTML Hypertext Markup Language WWWの基本言語 ブラウザは、必ず処理できなければいけない Anchorをいれることができる http://www.w3.org/hypertext/WWW/MarkUp/html-spec/html-spec.ps.gz
外部プログラム ブラウザの取り扱えない動作や知らないタイプの情報を扱う方法 helperプログラム 外部ビューワ イメージや音の再生など
Content-Encoding 型(ドキュメントのタイプ)とは別に、データストリームのエンコーディングをヘッダ中で指定することが可能 圧縮がかけられているドキュメント Content-type: application/postscript Content-encoding: gzip HTTPヘッダ PSデータ gzipで圧縮 されている HTTPペイロード
HTTP: Hypertext Transfer Protocol 単純なRequest/response クライアントは、サーバとコネクションを設定する クライアントがサーバにリクエストを投げる サーバがリクエストにしたがってリプライを返す TCP上で実装されていることが多い。
リクエスト (クライアントから サーバへ) HTTPリクエストの構成要素 Method: 可能な動作のうち一つ URI: Universal Resource Identifier プロトコルバージョン (Optionally) その他の情報(ヘッダ情報)
URLと URI 3つの部分から構成されている URI: URLのサブセット 転送に用いるプロトコルの識別子 サービス(サーバプロセス)識別子 ドキュメントの名前 URI: URLのサブセット サービス = サーバ名 + ポート番号 (TCP/IPの場合) ドキュメント名 = ファイルシステム上のパス名 http://ds.internic.net:80/rfc/rfc1630.txt メソッド サーバ名+ポート番号 フルパス名
TCPポート80 ! HTTPのデフォルトポート番号: 80 http://www.server.org/sample.html (port 80) http://www.server.org:8000/sample.html (port8000)
HTTPメソッド = リクエストの種類 GET: オブジェクトを返す。つまり情報を引き出す。 HEAD: オブジェクトに関する情報 (e.g.: タイムスタンプ)のみを返し、オブジェクトそのものは返さない。 POST: サーバへデータを送る。 普通はスクリプトへの入力に用いる。 PUT: データの蓄積を目的としてサーバへデータ を送る。 DELETE: データを削除する。 Other
クライアントからサーバに送る(ヘッダ)情報 User-Agent ブラウザ名 If-Modified-Since キャッシュのファイルのタイムスタンプを送り、変更されていた場合にのみファイルを受け取る Accept ブラウザが受け取れるMIME-type Authorization パスワードやその他の認証子
リクエストの例 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: */* )
レスポンス (サーバからクライアント) ステータス メタ情報 実際のデータ 要求が成功したか失敗したか レスポンス (サーバからクライアント) ステータス 要求が成功したか失敗したか HTTP-version Status-code Reason メタ情報 返送する情報の情報 コンテント・タイプ コンテント・エンコーディング 実際のデータ
HTTPのステータスコード (抜粋1) 200: Document follows 301: Moved Permanently HTTPのステータスコード (抜粋1) 200: Document follows リクエストは受け付けられた。続いてデータの転送が行われる 301: Moved Permanently 指定されたドキュメントは新しいURLに移動した 302: Moved Temporarily 指定されたドキュメントは一時的に新しいURLに移動している 304: Not Modified 指定されたドキュメントは、リクエストのパラメータで指定された日付より後に変更されていない
HTTPのステータスコード (抜粋2) 401: Unauthorized 403: Forbidden 404: Not Found HTTPのステータスコード (抜粋2) 401: Unauthorized 情報へのアクセスは制限されており、正しい認証が行われる必要がある 403: Forbidden アクセスは禁止されている 404: Not Found 指定された情報が見つからないか、アクセス制限が働いた 500: Server Error サーバの内部エラーが発生した
HTTPトランザクション例 Telnet CRLF CRLF 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 HTTP/1.0 200 OK Date: Sat, 30 Nov 1996 11:07:39 GMT Server: Apache/1.1b2 Content-type: text/html Content-length: 975 Last-modified: Fri, 08 Nov 1996 07:28:11 GMT <HTML> <HEAD> <TITLE>Shinoda Lab. Home Page (In English)</TITLE> </HEAD> ... </BODY> </HTML> Connection closed by foreign host. Telnet リクエストライン リクエスト (HTTPヘッダ+Entity Body = 空) CRLF レスポンス ステータスライン HTTPヘッダ (空) CRLF Telnet
ダイナミックドキュメント CGI --- Common Gateway Interface 独立したプログラムが起動 リクエストの入力はプログラムの入力へ プログラムの出力がクライアントに渡される SSI --- Server Side Include html中にコメントの形でプログラム実行を記述 プログラムの出力は、元のドキュメントに埋め込まれる Other サーバ拡張API: NSAPI, Apache Modules, ... Remote Program Execution: Java, JavaScript, mBED...
WWWサーバ: 基本中の基本 GET methodのみを処理する簡単なWebサーバ もっともコンパクトなサーバの大きさはどれくらいか コネクションを受け付ける リクエストラインを入力し、URI(パス名)を取り出す 適当なステータスラインとヘッダを出力する URIで指定されたオブジェクトを出力する 掃除をしてから最初に戻る もっともコンパクトなサーバの大きさはどれくらいか
#!/usr/local/bin/perl use IO::Socket; $sock = new IO::Socket::INET (LocalAddr => "localhost:8007", Listen => 5); die "can not create socket : $!\n" unless $sock; $sockNew = $sock->accept (); $message = <$sockNew>; $message2 = <$sockNew>; print $message; chop $message; @msg = split (" ", $message); if ($msg[0] eq "GET") { if ($msg[2] eq "HTTP/1.0") { open (FILE, $msg[1]) || &errMsg(); while (<FILE>) { print $sockNew $_; } close (FILE); sub endProg () { $sockNew->close (); $sock->close (); exit; } sub errMsg () { $date = `date`; print $sockNew <<ERRMSG HTTP/1.0 404 Not Found Date: $date Server: SIMPLE SAMPLE SERVER (Unix) Connection: close Content-Type: text/html ERROR MESSAGE ERRMSG &endProg();
WWW Webサーバに問い合わせることにより実現 この情報見せて DATA DATA 表示
Java、ActiveXなど WWW上で動作なども記述できるようになった しかし、できることが多くなった分、セキュリティホールも増えた 無防備に使っていると問題が発生する事もある
WWWまわりで危険なこと 知らないうちに個人情報を抜き取られる 知らないうちにウィルスに感染する 手元のコンピュータが停止させられる ウィルスに感染し、自分自身が知らない間に加害者になっている
WWWでサーバに送信される情報 実は、WWWクライアントからもサーバに情報は送信されている クライアントのIPアドレス 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を探し始める
Nimda Nimdaは、ウィンドウズの「共有」も利用する 感染すると、同じセグメントのマシン全部を攻撃し始める 攻撃が成功すると自分自身を対象のホストにコピーする
Nimda Outlookも利用する Nimdaに感染すると、アドレス帳上のメールアドレスに対してウィルスを添付して送信する
Nimda NimdaにやられたマシンがWWWサーバだった場合、WWWページにウィルスが仕込まれる WWWページを古いIEで見ると見た人が感染する
まとめ こまめにWindows Updateをする 自分が通信できるということは、他人も自分のところまで通信できるということであることを忘れない 注意を怠らない インターネットは匿名性があると言われるが、必ずしもそうとは言い切れない