سؤال

هل من الآمن استخدام مثل هذا الرمز؟

Response.Cookies[cookieName].Path = Request.ApplicationPath + "/";

أريد أن أعرف عن جميع حالات الزاوية ، من فضلك ...

هل كانت مفيدة؟

المحلول

باختصار ، لا ، إنها ليست آمنة. إن استخدام مسارات ملفات تعريف الارتباط محفوفة بالمشاكل لأنها حساسة للحالة في IE و Chrome ، ولكن ليس FF. هذا يعني أن أي عدم تطابق في قضية المسار سيحكم الأمور.

  1. عند إنشاء ملف تعريف ارتباط ، إذا كان المسار الذي تحدده يختلف في حالة كتابته المستخدم ، فلن يقوم المتصفحات بتخزينه.

  2. عند إرجاع المستخدم ، إذا كان المسار الذي يدخله يختلف في حالة من الرحلة الأولى ، فلن يقوم المتصفح بتزويد ملف تعريف الارتباط بالطلب.

أي المشكلات التي تسعى إلى حلها؟

نصائح أخرى

إذا كان تطبيقك يعمل في جذر المجال ، 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;
    }
}

لا ، إنها ليست آمنة ، للأسباب التي سيتم تحديدها.

لكن ... قد ترغب في توظيف هذه التقنية لتحقيق نيتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top