ページ

2009年9月8日火曜日

NSHTTPCookieStorage相当のクラスを自前で実装する (9)クッキー受取のドメインチェック強化

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

XCEffectiveTLDNames を使いドメインチェックを強化する。
といっても3行を加えるだけ。
NSHTTPCookieStorage.m

- (void)setCookie:(NSHTTPCookie *)cookie
{
if ([[XCEffectiveTLDNames sharedEffectiveTLDNames] isEffectiveTLDName:[cookie domain]]) {
return;
}
  :


また、クッキー送出もとのサーバのドメインがクッキーで設定されているドメインと一致するかをチェックする。これはリクエストURLが必要なので -[setCookies:forURL:mainDocumentURL:] へ書いてみた。
- (void)setCookies:(NSArray *)cookies forURL:(NSURL *)URL mainDocumentURL:(NSURL *)mainDocumentURL
{
NSString* url_host = [URL host];

for (NSHTTPCookie *cookie in cookies) {
if ([url_host hasSuffix:[cookie domain]]) {
[self setCookie:cookie];
}
}
}


クッキーのドメインがリクエストURLホストの後方一致となるかをチェックする。
(例)リクエストURLのホスト:www.xcatsan.com
  a) クッキードメインが .xcatsan.com の場合:OK
  b) クッキードメインが www.xcatsan.com の場合:OK
  c) クッキードメインが .mail.xcatsan.com の場合:NG



動作確認は、Googleのログインで成功した。大丈夫そうだ。


サンプル:CookieStorage-4.zip


- - - -
クッキー受取、送出が大体実装できた。残りは永続化の部分だな。