クッキーの信頼性を確認できるので問題はありません。 Facebookには、各Cookieにsigという値が含まれています。私は完全な詳細については説明しませんが、基本的には、APIシークレットをクッキーに追加し、sig値を削除し、クッキー値をハッシュし、ハッシュがsigと一致することを確認します。あなたとFacebookはAPIシークレットの価値を知っている唯一のものだから、クッキーが改ざんされていないことを確かめることができます。
クッキーの内容を見ているユーザーのどちらかが問題ではありません。クッキーには、そのユーザーに関連付けられているアクセストークンのみが含まれています。ユーザーがクッキーを改ざんしようとすると、クッキーが無効になります。とにかく彼らのアクセストークンは彼ら自身のアカウントにアクセスするだけです。
最も重要なことは、クッキーが本物であることを確認することです。多くの人々はこれをやりませんし、巨大なセキュリティ問題を引き起こします。たとえば、CookieにはFacebookのユーザーIDが含まれています。そのユーザーIDを取得してから、ユーザーにクレジットカードを要求してください。そのユーザーIDでそのクレジットカードを保管しても、そのクッキーを検証しないと、誰もが入ってきてそのクッキー内のユーザーID値を変更してプライベートデータにアクセスできます。ただし、APIの秘密でCookieを確認すると、そのCookieが改ざんされたかどうかがわかります。ここで
は、私たちが私のFacebookのC#SDK(http://facebooksdk.codeplex.com)でクッキーを検証する方法である:
/// <summary>
/// Validates a session_version=3 style session object.
/// </summary>
/// <param name="session">The session to validate.</param>
protected override void ValidateSessionObject(FacebookSession session)
{
if (session == null)
{
return;
}
var signature = this.GenerateSignature(session);
if (session.Signature == signature.ToString())
{
return;
}
session = null;
}
/// <summary>
/// Generates a MD5 signature for the facebook session.
/// </summary>
/// <param name="session">The session to generate a signature.</param>
/// <returns>An MD5 signature.</returns>
/// <exception cref="System.ArgumentNullException">If the session is null.</exception>
/// <exception cref="System.InvalidOperationException">If there is a problem generating the hash.</exception>
protected override string GenerateSignature(FacebookSession session)
{
var args = session.Dictionary;
StringBuilder payload = new StringBuilder();
var parts = (from a in args
orderby a.Key
where a.Key != "sig"
select string.Format(CultureInfo.InvariantCulture, "{0}={1}", a.Key, a.Value)).ToList();
parts.ForEach((s) => { payload.Append(s); });
payload.Append(this.ApiSecret);
byte[] hash = null;
using (var md5 = System.Security.Cryptography.MD5CryptoServiceProvider.Create())
{
if (md5 != null)
{
hash = md5.ComputeHash(Encoding.UTF8.GetBytes(payload.ToString()));
}
}
if (hash == null)
{
throw new InvalidOperationException("Hash is not valid.");
}
StringBuilder signature = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
signature.Append(hash[i].ToString("x2", CultureInfo.InvariantCulture));
}
return signature.ToString();
}
ありがとうございます。私は他のクッキーもハイジャックされることを見落としてしまったFBクッキーを心配していたので、私の心配は無用になりました。 –