Cookie パスに Request.ApplicationPath を使用しても安全ですか?
-
22-09-2019 - |
質問
そのようなコードを使用しても安全ですか?
Response.Cookies[cookieName].Path = Request.ApplicationPath + "/";
すべての特殊なケースについて知りたいのですが...
解決
要するに、いいえ、安全ではありません。Cookie パスの使用には問題が伴います。IE と Chrome では大文字と小文字が区別されますが、FF では区別されないからです。これは、パスの大文字と小文字が一致しないと問題が発生することを意味します。
Cookie を生成するときに、設定したパスがユーザーが入力したパスと大文字小文字が異なる場合、ブラウザはそのパスを保存しません。
ユーザーが戻ってきたときに、入力したパスが最初の旅行時と異なる場合、ブラウザはリクエストに Cookie を提供しません。
どのような問題を解決しようとしていますか?
他のヒント
あなたのアプリケーションは、ドメイン、Request.ApplicationPath == "/"
のルートで実行される場合。したがって、あなたのコードで、あなたのクッキーのパスが//
になります。あなたがこれを行うことによって、この問題を回避かわすことができます:
cookie.Path = Request.ApplicationPath;
if (cookie.Path.Length > 1) cookie.Path += '/';
が正しく指摘するようにに、あなたはあなたのアプリケーションは、URLの一貫性のある筐体を強制していることを確認したくなるでしょう(つまり、リダイレクト彼らの小文字と同等に大文字を含むURLを持つすべての要求を)。
それ以外は、私はあなたが罰金これを実行する必要があると考えています。あなたのクッキーがすべてになりたい場合は、このようなコードでカスタムIHttpModule
の作成を検討し、「アプリケーションがスコープ」(またはglobal.asax.cs
を拡張):
private void Application_EndRequest(object sender, EventArgs e)
{
var app = (HttpApplication)sender;
var cookiePath = app.Request.ApplicationPath;
if (cookiePath.Length > 1) cookiePath += '/';
foreach (string name in app.Response.Cookies.AllKeys)
{
var cookie = app.Response.Cookies[name];
cookie.Path = cookiePath;
}
}
いいえ、それはウィルが指定していることの理由のために、安全ではありません。
しかし...あなたは/ <この技術をhref="https://stackoverflow.com/questions/1412512/how-to-determine-net-cookie-path/1412596#1412596"> あなたの意図を満たすために。