• 検索結果がありません。

PowerPoint プレゼンテーション

N/A
N/A
Protected

Academic year: 2021

シェア "PowerPoint プレゼンテーション"

Copied!
24
0
0

読み込み中.... (全文を見る)

全文

(1)

ネットワークプログラミング

演習

第14回 Cookie

(2)

前回の出席確認

なぜWebサーバ上ではチャットを作りにくいのか? 他者の発言をWebサーバに取りに行かねばならない  頻繁に更新すれば可能だが、そうするとサーバに負荷がかかる ➡ Webサーバには負荷をかけてはいけなくて、チャットのサーバには 負荷をかけてよいのか?/チャットのサーバには負荷がかからない のか? …かからない。なぜか?Webサーバとチャットサーバの違いは何か Webサーバは、情報を渡すと切断する 他者が発言していなくても更新を要求する必要がある チャットサーバは(会話が続く限り)接続したまま 他者が発言したことをサーバからクライアントに通知できる 2018.01.17 これが本質的な解答。 そもそも 「負荷」って何?

(3)

前回の出席確認

push型情報 と pull型情報  Webページの閲覧は pull … Webサーバは pull されることしか考えていない構成に なっている  チャットの場合、他者の発言は push で受け取るべき …双方向の通信が必要 リアルタイム性  「チャットはリアルタイムだから負荷が大きい」という 回答では、説明不足。  なぜ(Webサーバ上で実現しようとすると)負荷が大き いのか、その負荷はチャットサーバなら許容されるのか、 といった議論をしないと説得力がない。 2018.01.17

(4)

余談:負荷

負荷には、必要な負荷と不要な負荷がある

例)ネットショッピングのサイトが、人気商品の発売当日に 注文が殺到して、高負荷になる …必要な負荷 例)新しい情報が無いにもかかわらず、更新要求が頻繁に やってきて、高負荷になる …不要な負荷に思える 2018.01.17

(5)

今日のお題

Cookie

(6)

Cookie とは

 Webサーバからクライアント(ブラウザ)に情報を 保存しておくように要求する  この情報を Cookie という  ブラウザは Cookie を保存しないことを選択できる  ブラウザはWebサーバに閲覧要求を出すときに、 過去に受け取った Cookie を(あれば)送る 2018.01.17 Webサーバ ブラウザ 保存を要求 閲覧時にCookieがあれば URLと一緒に送る

(7)

Cookie に設定する値

 名前  値  有効期限  ブラウザは有効期限を過ぎた情報を送らないと考えてよい  ブラウザを閉じるまで、を指定することも可能  domain  設定するとブラウザはそのドメインのサブドメインにも情報を送る  省略すると、Cookie を送ったサーバだけが対象となる  path  設定するとブラウザはそのパスの子孫パスにあるページにも情報を 送る  省略すると Cookie を送ったページと同じパスにあるページだけが 対象となる 2018.01.17

(8)

PHP における Cookie の扱い

Cookie の受け取り ブラウザからの要求に Cookie が設定されていれ ば、連想配列 $_COOKIE に格納される Cookie の設定 setcookie を呼び出して設定する ただし、他に何かを表示する前に設定しなければ ならない 2018.01.17

(9)

プログラム例:おみくじ

(再掲)

http://sun.ac.jp/prof/yamagu/2017NP/omikuji.php ソースコード: <HTML> <HEAD><TITLE>Fortune</TITLE></HEAD> <BODY> <?PHP $i = rand(1,4); if ($i == 1) { echo '大吉<BR/>' ; } else if ($i == 2) { echo '中吉<BR/>' ; } else if ($i == 3) { echo '吉<BR/>' ; } else { echo '凶<BR/>' ; } ?> </BODY> </HTML> 2017.12.20 1から4までの整数をランダム に生成して、変数$iに代入。 $iの値によって表示する内容 を変える。 このサンプルは、そのうち また使います

(10)

おみくじの改造

問題点:再読込すると結果が変わる

「今日の運勢は…」にしたいので、24時間は結果を 変えたくない。  おみくじはユーザごとに違う結果にしたい しかし、サーバ側でユーザ管理をするのは面倒 ➡Cookie を使う ユーザのブラウザごとに、結果を記録できる 2018.01.17

(11)

Cookie を使ったおみくじのソース

<?PHP

define('COOKIE_NAME', 'omikuji2');

if (isset($_COOKIE) && (array_key_exists(COOKIE_NAME,$_COOKIE))) { $kuji = $_COOKIE[COOKIE_NAME]; } else { $kuji = rand(1,4); setcookie(COOKIE_NAME,$kuji,time()+60*60*24); } ?> <HTML> <HEAD><TITLE>Fortune</TITLE></HEAD> <BODY> 今日の運勢は...<BR/> <?PHP if ($kuji == 1) { echo '大吉<BR/>' ; } else if ($kuji == 2) { echo '中吉<BR/>' ; } else if ($kuji == 3) { echo '吉<BR/>' ; } else if ($kuji == 4) { echo '凶<BR/>' ; } ?> </BODY> </HTML> 2018.01.17 後半は改造前と ほぼ同じ。 この部分を 次ページで解説

(12)

Cookieおみくじの解説

<?PHP define('COOKIE_NAME', 'omikuji2'); if (isset($_COOKIE) && (array_key_exists(COOKIE_NAME,$_COOKIE))) { $kuji = $_COOKIE[COOKIE_NAME]; } else { $kuji = rand(1,4); setcookie(COOKIE_NAME,$kuji,time()+60*60*24); } ?> 2018.01.17 何度か使うので、 定数に定義 Cookie が設定されていたら… おみくじの番号を設定 Cookie から、おみくじの 番号を読む おみくじの番号を Cookie に設定する。 有効期限は24時間後

(13)

24時間後だとテストしづらいので…

Cookie の有効期限を10秒後にしてテスト:

setcookie(COOKIE_NAME,$kuji,time()+60*60*24);

setcookie(COOKIE_NAME,$kuji,time()+10);

に変更

…再読込しても、10秒間は結果が変わらない

ことを確認してください。

2018.01.17

(14)

蛇足:24時間後ではなく今日中にしたい

有効期限は UNIX time で指定する

 1970年1月1日0時0分0秒からの(ほぼ)経過秒数  GMTで。日本の時間(JST)は 9時間ずれている  86400(=60×60×24)の倍数が 0時0分0秒 setcookie(COOKIE_NAME,$kuji,time()+60*60*24);$day = 60*60*24; $t = time(); $today = ($t+60*60*9) % $day; setcookie(COOKIE_NAME,$kuji,$t-$today+$day); に変更 2018.01.17 24時間の秒数。何度か使うの で、変数に入れておく 明日の0時0分0秒 現在時刻を取得 今日になってからの経過秒数

(15)

Cookie を確認しよう

ブラウザに保存された Cookie を確認する:

 Firefoxの場合 メニュー→オプション→プライバシーとセキュリティ →Cookieを個別に削除  Chromeの場合 GoogleChrome の設定→設定→「設定項目を検索」に Cookieと入力→コンテンツの設定→Cookie→すべての Cookieとサイトデータを表示 2018.01.17

(16)

余談:ユーザの手元のデータの情報を隠す

Cookie を見ると、おみくじの番号がそのまま見える …これを隠すには? 暗号化…半分正解。  サーバだけが知っているパスワードで暗号化すると… 1 → QWlpWWdRa0RlMWxTMjRLSUZNdzF0QT09 2 → NUpFQ1l3QUJ5RGRQNlF2R2JEdzlYUT09 3 → OFV6UUlqUStWY0FoREtadk1ONGIyQT09 4 → R1BvYmVzY3dsbGlLZFEzYllNVzhLdz09 2018.01.17 単なる暗号化だと、ここが毎回同じ。

(17)

余談:ユーザの手元のデータの情報を隠す

ランダムなbit列(固定長)を平文につけて、それごと 暗号化する 復号したら、ランダムbit列の部分を無視する  簡単に無視できるように、固定長にしておく  こういうランダムbit列を salt と呼ぶ 同じ情報(例えば大吉を表す 1)に対して暗号文が 2saltのbit長種類できる。 …暗号文から平文を推測することが難しくなる 2018.01.17

(18)

暗号化された番号をCookieに保存するおみくじ

2018.01.17 <?PHP define('COOKIE_NAME', 'omikuji3'); define('CRYPT', 'AES-256-CBC'); define('KEY', 'Naisho'); define('IV', '_INITIAL_VECTOR_'); define('SALTLEN',10); $kuji = null; if (isset($_COOKIE) && (array_key_exists(COOKIE_NAME,$_COOKIE))) { $txt = openssl_decrypt(base64_decode($_COOKIE[COOKIE_NAME]), CRYPT,KEY,0,IV); if ($txt != null) { $kuji=(int)substr($txt,SALTLEN); } } if ($kuji == null) { $kuji = rand(1,4); $txt = openssl_random_pseudo_bytes(SALTLEN) . $kuji; setcookie(COOKIE_NAME, base64_encode(openssl_encrypt($txt,CRYPT,KEY,0,IV)), time()+60*60*24); } ?>

(19)

情報の隠し方の効果

隠していない場合  2…中吉, 4…凶 ➡ 1が大吉, 3が吉と推測できる 暗号化  未出のおみくじを推測するのは困難  一度出たおみくじは、そのときの Cookie を記録 しておけば、Cookie からおみくじを判別できる salt付きの暗号化  Cookie からおみくじを判別するのは困難  一度出たおみくじは、同じCookieを送ることで 出すことができる 2018.01.17

(20)

サーバがユーザを管理する場合の

Cookieの利用

(21)

ユーザとセッションの管理

サーバ側でユーザを管理する:  ユーザ名とパスワードをサーバのDBに登録  サーバはユーザのログイン時にユーザ名とパス ワードを突合する ログアウトするまで、いちいちパスワードを入れず に作業をしたい:  Cookie にユーザ名やユーザIDを設定しておく Cookieがなければ、ユーザにログインさせる  ログアウト時にはCookieを削除する 削除:有効期限を過去に設定する 2018.01.17

(22)

ユーザ管理と Cookie

Cookie にパスワードを記録しているわけではない Cookie にユーザ名やユーザIDを(暗号化して)記録 しておき、Cookie を持っていればパスワードの入力 を省略できるようにしていることが多い ➡ Cookie が漏洩すると、なりすまされる危険がある Cookieに REMOTE_ADDR や HTTP_USER_AGENT を記録しておいてチェックすれば、なりすまされにく いシステムになる

(23)

複数クライアントからの同時アクセスを

検知する

 アクセスのたびに(毎回)異なる値を Cookie を設定 する  Cookie に設定した値を(ユーザごとに)サーバ側 にも記録しておく ➡サーバに記録されたものと、アクセス時のCookie が異なれば、前回アクセスと今回アクセスの間に、 他のクライアントからアクセスしていると分かる 2018.01.17

(24)

次回予告

振り返りと関連する話題

参照

関連したドキュメント

テキストマイニング は,大量の構 造化されていないテキスト情報を様々な観点から

*この CD-ROM は,Microsoft Edge,Firefox,Google Chrome,Opera,Apple Safari

 ESET PROTECT から iOS 端末にポリシーを配布しても Safari の Cookie の設定 を正しく変更できない現象について. 本製品で iOS

当社は、お客様が本サイトを通じて取得された個人情報(個人情報とは、個人に関する情報

ヒュームがこのような表現をとるのは当然の ことながら、「人間は理性によって感情を支配

このような情念の側面を取り扱わないことには それなりの理由がある。しかし、リードもまた

ているかというと、別のゴミ山を求めて居場所を変えるか、もしくは、路上に

「系統情報の公開」に関する留意事項