第8章 Web技術とセキュリティ 岡本 好未
8.1.1 Webの基本的な構成要素 Webアクセスの流れ Webページ HTTPプロトコルで通信 サーバー ・Apache(OSS) ・IIS(MicroSoft) クライアント ・Edge ・Chrome ・safari etc… リクエスト ダウンロード Webアクセスの流れ ①ユーザがWebブラウザにURLを入力 ②WebブラウザからリクエストをWebサーバーに送る ③Webサーバーがリクエストを解析して処理 ④Webサーバーがレスポンスをブラウザに返す ⑤Webブラウザが受信データを解析して表示 Webページ 静的ページ:Webサーバー上にあるhtmlファイルがダウンロードされブラウザで表示される 動的ページ:Webサーバーを経由してWebアプリケーションサーバーにより動的に生成されたのがダウンロードされて表示される
8.1.2 HTTP通信でのデータの受け渡し Formタグによりユーザーネームとして入力された文字列を、Webアプリケーションサーバに用意されている「search.php」というファイル検索用のプログラムへ送信
・get 取得したパラメータをURIで渡す ・post 取得したパラメータをHTTPリクエストのbody部に記す パラメータの送信メソッド ・get http://サーバのドメイン/form.php?username=taro&ei=UTF8 ・post http://サーバのドメイン/form.php URI クエリ文字列 ・?で始まる ・各パラメータを『変数名=値』の形で表す ・↑が複数ある場合は&でつなぐ HTTPリクエスト HTTPリクエスト行 1行 HTTPヘッダー行 複数行 1行空ける HTTPボディー部 必要なだけ
8.1.3 Webアプリケーションサーバー 3階層システム フロントエンド:画面のデザインなどを提供するソフトウェア ロジック:振る舞いを記述したソフトウェア バックエンド:DBMSなどのソフトウェア
8.1.3 Webアプリケーションサーバーの例 例1: PHP 実行環境:Apache ・PHP言語で作成されたWebアプリケーションサーバーとやり取りする ・必要に応じてDBMSから必要に応じてデータを取得、それに基づいてページを生成 例2: Ajax(Asynchronous JavaScript+XML) ・Webサーバから(XHTML、CSS等と一緒に)ダウンロードしたJavaScriptをクライアントのWebブラウザで実行 ・JavaScriptはXML形式などのデータを用いてwebアプリケーションサーバーと通信する
8.2 Webにおける認証 Basic/Digest認証 HTTPには状態がない … 認証の記録が必要 ・ユーザ名、パスワードをBase64で符号化(ほぼ平文) Digest認証 ・サーバからのChallenge、パスワード等から作ったハッシュ値でResponse ・一方向性認証(サーバ→クライアント)のみ
8.2 Webにおける認証 BASIC認証のやり取り ①BASIC認証を必要とする設定をしておいたリソースにWebブラウザでアクセスする ②アクセス制御されたリソースであることを知らせるメッセージ (Digestの場合、challengeが送信される) 入力されたユーザー名とパスワードをBase64で符号化する ③のようなメッセージをHTTPヘッダに追記して送信することで、アクセス制御されたリソースの取得を要求する ( Digestの場合、challengeやパスワードをハッシュ化したものをresponseとしておくる) ④ユーザー名とパスワードが正しければリソースを提供する ④以降、アクセス制御されたリソースにアクセスするたびに、符号化されたユーザー名とパスワードが常にヘッダに含められる
8.2 Webにおける認証(Cookieによる認証) ・アプリケーションサーバーへアクセスする際、クッキーをHTTPヘッダに含んで送信する ・クッキーは、アプリケーションサーバー上で作成され、ブラウザに保存される ・同一のページで複数のクッキーを利用できる
8.2 Webにおける認証(Cookieによる認証) ・クッキーが第3者に漏れることでなりすましをされる ・クッキーを用いて認証されたセッションを管理するには、SSL/TLSで保護する必要がある
8.3 XSS攻撃 ・クロスサイトスプリクティング:WEBアプリケーション上で悪意のあるスクリプトを動かされる ・ユーザーの入力に対して動的にHTMLページを生成するアプリケーションが対象 例:名前を入力して送信ボタンをクリックすると、ユーザーが入力した名前がページの一部となって表示されるアプリケーション 『送信』
8.3 XSS攻撃 名前の入力欄にHTMLタグを使用した「<s>kokubu</s>」という“名前”を入力すると… 「<s>kokubu</s>」という文字列をブラウザ上に表示したい場合は「<s>kokubu</s>」としなければならない
8.3 XSS攻撃 悪意のあるスクリプトだと危険である 名前入力欄にscriptタグを使用した「<script>alert(“XSS”);</script>」という“名前”を入力すると… XSSと書かれたダイアログボックスが表示される。 悪意のあるスクリプトだと危険である
8.3 XSS攻撃の対策 入力チェックとエスケープ処理 入力チェック エスケープ処理 ・実際の処理を行う前に、想定した文字列(例:半角英数字)かどうかチェック エスケープ処理 ・HTMLにとって特別な意味を持つメタ文字が含まれていた場合、 通常の文字列として扱うよう変換 ・エスケープ処理関数が用意されている言語も
最近のセキュリティニュース http://www.itmedia.co.jp/news/articles/1801/16/news066.html