Cookieを使う:その2
昨日の続き.今回は,予定通り「Cookieの内容を取得する」です.正直な事言いますと,課題の内容を先生に確認しますれば,ログインだとかそーゆー処理は「まったく」必要がない(けどまぁ折角だし残しておいて,レポートで送ってくれても良いよ)と言われました.でももうやってしまった後なので,書きますよ,ボクは.
それでは,昨日と同じように,JSPプログラムでクッキーを扱う:Tomcatを使う「JSPプログラミング」(8) - @ITを参考に実践していきます.
Cookieの内容を取得する
少し,参考とは違います.
// Cookieを読み込む Cookie cookies[] = request.getCookies(); // クライアントからサーバにCookieを全て渡す Cookie cookie = null; // 取得したいCookie if(cookies != null){ for(int i = 0; i < cookies.length ; i++){ // Cookieの一覧を全て見ていって if(cookies[i].getName().equals("bookdbuser")){ // 求める名前のCookieがあれば cookie = cookies[i]; // 取得したいCookieに格納し,ループを抜ける break; } } } if(cookie == null){ // Cookieが取得できなければ %><p><a href = "login.jsp">ログイン</a>してください</p><% }else{ // Cookieが取得できれば String user_id = URLDecoder.decode(cookie.getValue()); // URLDecoderを使って,Cookieの情報をデコードする.
まぁそんな難しい事はしてませんので,コメントとか読めば仕組みはわかるはずです.ただ,コメントの書き方が下手ですけど.
最後の処理,
String user_id = URLDecoder.decode(cookie.getValue());
ですが,本来ならCookieの情報をdecodeして,んでその文字列なんてのは定められたフォーマットなんだろうから,一旦適当な文字列に落とし込み,パースしてごにょごにょ,ってするのが正しいんでしょうね.今回の場合,CookieにはユーザIDしか書き込んでいないので,簡単です.
Cookieの危険だと思う所
ここ.
// Cookieを読み込む Cookie cookies[] = request.getCookies();
これは結局,クライアントのブラウザにある全てのCookieを,このcookiesっていう配列にゴソッと読み込んでる訳ですよね.てことは,そのcookiesの中に,例えばですけど,とあるウェブサービスのユーザIDやパスワードやらといった情報が「hoge」という名前で記録されているとすれば,悪意のあるサイトでCookieを読み込まれ,その中から「hoge」というCookieを読み込まれたりすれば,「駄目じゃん」で済まない自体に陥りますよね.
ですから,Cookieを発行するときは,せめて暗号化(もちろんMD5のように暗号化オンリーではなく,読み込んで複合化出来るように)しないといけませんね.
ちなみに,ボクのブラウザのCookieの中には,古いFC2の掲示板のなんですけど,書き込んだ名前とパスワードがしっかりと読める状態でありました.こえー.