چرا توسعهدهندگان وب از کوکیها استفاده میکنند؟
- کوکیها چه کار ویژهای انجام میدهند و چرا وبسایتها از کاربران درخواست میکنند تا کوکیها را قبول کنند؟ کوکیها در زمان وبگردی نقش مهمی ایفا میکنند و راهکار متفاوتی برای ذخیرهسازی و بازیابی دادهها ارائه میکنند که در مقایسه با سایر روشها کارآمدتر است. کوکیها به توسعهدهندگان وب اجازه میدهند اطلاعات مرتبط با کاربران را ذخیرهسازی کنند تا کاربران در مراجعههای آتی به وبسایت مجبور نشوند برخی اطلاعات را دومرتبه وارد کنند. بهطور مثال، برخی از کوکیهای اطلاعات مرتبط با نام کاربری و گذرواژهها را ذخیرهسازی میکنند تا کاربران مجبور نشوند هر زمان به وبسایتی وارد میشوند اطلاعات هویتی را وارد کنند یا برخی دیگر اطلاعات مربوط به جستوجوهای انجام شده در وبسایت را ذخیرهسازی میکنند.
تفاوت کوکیها با سایر روشهای ذخیرهسازی
- شیوههای گوناگونی برای ذخیرهسازی دادهها در مرورگرها وجود دارد که از مهمترین آنها به موارد زیر میتوان اشاره کرد:
• LocalStorage
• SessionStorage
• IndexedDB
• Cache API (in modern Browsers)
• Cookies
- تمام این روشها (به غیر از SessionStorage) میتوانند دادهها را بهطور پایدار در مرورگر کاربران ذخیرهسازی کنند. منظور از واژه پایدار این است که دادهها حتا بعد از اینکه مرورگر را میبندید پاک نمیشوند. رویکرد فوق در نقطه مقابل متغیرهای استفاده شده در زبانهای برنامهنویسی است که بهطور موقت در حافظه ذخیره شده و بعد از بستن وبسایت حذف میشوند.
کوکیها در جاوااسکریپت
از طریق آبجکت document.cookie در جاوااسکریپت میتوان به کوکیها دسترسی پیدا کرد. در اینجا تنها میتوان یک مقدار رشتهای را ذخيره کرد، بنابراین باید کلیدها و مقادیر را در قالب زیر وارد کنید تا ذخیره شود:
document.cookie = “key1=value1; key2=value2; key3=value3”;
- به این شكل میتوانید دادهها را در کوکیها ذخیره کنید و با استفاده از جاوااسکریپت آنرا بازیابی کنید. البته این امکان وجود دارد تا راهکار فوق را توسط سایر مکانیزمهای ذخیرهسازی دادهها نیز استفاده کرد. تمام شیوههای ذخیرهسازی (به غیر از کوکیها) تنها از طریق جاوااسکریپت در دسترس هستند. به این معنا که فقط پس از باز شدن وبسایت میتوانید به آنها دسترسی پیدا کنید.
ذخیرهسازی محلی در مقابل کوکی
اگر شیوه ذخیرهسازی محلی (LocalStorage) را انتخاب کنید، این توانایی را دارید تا دادههای رشتهای را به شکل زیر ذخیره كنيد:
localStorage.setItem(“mode”, “dark”);
با استفاده از روش فوق این امکان وجود دارد تا شیوه ذخیرهسازی دادهها را به شکل محلی تنظیم کنید و تغییرات مربوط را به شیوه زیر بررسی کنید:
var mode = localStorage.getItem(“mode”);
if (mode == “dark”) {
document.body.style.backgroundColor = “black”;
document.body.style.color = “white”;
}
- همانگونه که مشاهده میکنید این کد بعد از اینکه صفحه بارگیری میشود اجرا میشود، اما اجرای آن ممکن است با تاخیر همراه باشد و باعث چشمک زدن و پرش لحظهای صفحه نمایش شود. در چنین مواردی بهتر است برای تنظیم حالت از localStorage استفاده کنید، اما شرایطی نیز وجود دارد که استفاده از کوکیها تنها راه ممکن است.
استفاده از کوکی برای صفحات ورود
- وقتی به وبسایتی وارد میشوید و مرورگر را میبندید و یکبار دیگر به همان وبسایت مراجعه میکنید، در اغلب موارد اطلاعات ورود به حساب کاربری شما در سایت محفوظ باقی میماند و دیگر نیازی به لاگین مجدد ندارید. این فرآیند قبل از اینکه وبسایت باز شود اتفاق میدهد. به این معنا که سرور میزبان وبسایت مطلع میشود که قبلا لاگین کرده بودید و اطلاعات کاربری شما را بازیابی میکند. در اینجا مرورگر بهطور خودکار به سرور اطلاع میدهد که شما قبلا لاگین کرده بودید. این وظیفه برعهده کوکیها است. مکانیزم فوق همان چیزی است که کوکیها را از سایر روشهای ذخیرهسازی متمایز میکند.
کوکیها چگونه کار میکنند
- بعد از اینکه وارد وبسایتی میشوید، برای ورود به حساب کاربری خود باید اطلاعات نام کاربری و گذرواژهتان را وارد کنید. بعد از وارد کردن این اطلاعات و فشردن دکمه ورود (log in) مرورگر یک درخواست POST حاوی اطلاعات شناسایی برای سرور ارسال میکند. شما میتوانید با استفاده از ابزار توسعهدهنده (Dev Tools) مرورگر خود این درخواستها را ردگیری کنید. اگر به زبانه Network در Dev Tools
- بروید، میتوانید تمام درخواستهایی ارسال شده برای یک وبسایت را مشاهده کنید. همچنین میتوانید کوکیهای ذخيره شده توسط وبسایت را هم مشاهده کنید (شکل بالا).
- همانگونه که مشاهده میکنید کوکیها به صورت زوج کلید/مقدار نگهداری میشوند. آنها خصوصیات دیگری نیز دارند که از آن جمله میتوان به Domain, path, expires in و HttpOnly اشاره کرد. کوکیهای ذخيره شده توسط یک وبسایت تنها توسط همان وبسایت قابل استفاده هستند. رویکرد فوق مانع از آن میشود تا وبسایتهای دیگر به اطلاعات حساس کوکیهای متعلق به سایر وبسایتها دسترسی پیدا کنند.
کوکیها شامل چه محتوایی هستند؟
- اغلب وبسایتها از کوکی استفاده میکنند تا ببینند آیا شما همان فردی هستید که قبلا به سایت لاگین کرده بود. بعد از اینکه وبسایت مشخصی را باز میکنید، کوکی بهطور خودکار به سرور ارسال میشود و وبسایت اصالت کوکی را بررسی میکند. این کوکیها معمولا شامل کلید جلسات (session keys) هستند. کلیدهای رمزگذاری شده تصادفی امنیت زیادی دارند و محل ذخیرهسازی اطلاعات شما در سرور را نشان میدهند. هیچکس نمیتواند این کلیدها را حدس بزند، بنابراین شما در امنیت هستید. وبسایت مورد نظر شما اين کلیدها را بررسی و صحت آنرا تشخیص میدهد و اطلاعات ورود شما (نام کاربری، گذرواژه) را بازنشانی میکند. کوکیها بخشی از درخواست شما هستند و لازم نیست خودتان آنها را ایجاد کنید. یکی دیگر از ویژگیهای شاخص کوکیها تاریخ انقضا است. تاریخ انقضا یک ویژگی امنیتی است که مانع سوء استفاده از کوکیها میشود. اگر در نظر داشته باشید با استفاده از سایر روشهای ذخیرهسازی بهطور مثال LocalStorage یک سیستم لاگین را پیادهسازی کنید، کلید جلسات باید با استفاده از جاوااسکریپت به تمام درخواستها اضافه شود.
امنیت کوکیها
- در ساختار اغلب وبسایتها اینگونه تعریف شده که وقتی از حساب کاربری خود خارج میشوید (log out) کوکی از مرورگر شما حذف شده و جلسه لاگین نیز از سرور پاک میشود. بنابراین حتا اگر هکری به کوکیهای شما دسترسی پیدا کند، اطلاعات شما را پیدا نخواهد کرد. به همین دلیل است که توصیه میشود همیشه بعد از اتمام کار از حساب کاربری خود خارج شوید. وقتی از طریق حالت incognito به وبسایتی لاگین میکنید و بعد از پایان کار خود تنها پنجره را میبندید، وضعیت شما در آن وبسایت به صورت لاگین شده باقی میماند و اگر کسی یک کپی از کوکی آن جلسه را در اختیار داشته باشد، قادر است با آن کوکی به حساب شما وارد شود. با وجودی که این اتفاق نادر است، بهترین کار این است که همیشه از حساب کاربری خود بهطور کامل خارج شوید.
- مورد دیگری که باید از آن آگاه باشید این است که وقتی Dev Tools را باز میکنید پیغامی شبیه به شکل زیر دریافت میکنید. در مواردی مثل لاگین به سایتهایی مثل فیسبوک باید مراقب Dev Tools باشید. هکرها میتوانند با استفاده از شیوهای به نام Session Hijacking به حساب شما دسترسی پیدا کنند.
سرقت جلسات (Session Hijacking)
- وقتی به وبسایتی لاگین میکنید، یک جلسه لاگین شکل میگیرد. این جلسه تا زمانیکه بهطور دستی خارج نشوید یا تاریخ انقضای کوکی فرا نرسد فعال باقی میماند. از آنجا که این جلسه فعال مانده کوکی نیز شامل کلید جلساتی است که توسط سرور تایید شده است. بنابراین تا زمانی که این جلسه فعال است، کلید جلسه نیز معادل گذرواژه عمل میکند و اگر کسی به این کلیدها دسترسی پیدا کند قادر است به راحتی به حساب شما وارد شود. این همان کاری است که هکرها با سرقت کوکیهای انجام میدهند. اگرچه وبسایتها سطوح امنیتی مختلفی را روی سیستمهای لاگین خود پیادهسازی میکنند، اما میزان محافظت آنها به سرورهایشان محدود میشود. آنها تنها میتوانند از دادههایی استفاده کنند که توسط کلاینت برای آنها ارسال شده است. اطلاعاتی که برای شناسایی سریع یک کلاینت استفاده میشوند. اگر دو دستگاه کوکی یکسان داشته باشند و یک درخواست را به یک سرور یکسان ارسال کنند، نمیتوان به راحتی تفاوت بین آنها را تشخیص داد. هر چند سرورها میتوانند آدرس آیپی درخواستها را مشاهده کنند، اما دستگاهها معمولا از یک آدرس آیپی ثابت استفاده نمیکنند تا قابل شناسایی باشند. این نقطه ضعفی است که توسط هکرها مورد سوء استفاده قرار میگیرد. آنها تنها کافی است به کوکیهای شما دست پيدا کنند تا به جای شما درخواستها را ارسال کنند.
سرقت جلسات در شبکههای عمومی
- یک مهاجم با رهگیری شبکه کاربری میتواند کوکیهای او را سرقت کند. هر زمان که به یک شبکه وایفای عمومی متصل میشوید تمام دادههای شما از طریق این شبکههای غالبا ناامن عبور میکند. اگر درباره شبکه عمومی که قصد استفاده از آنرا دارید اطلاعات چندانی در دست ندارید، این احتمال را بدهید که ممکن است توسط یک هکر راهاندازی شده باشد و قصد دارد کوکیهای شما را سرقت کند.
حملات XSS
کدهای مخرب مختلفی وجود دارند که برای سرقت کوکیها استفاده میشوند. بهطور مثال، کد زیر را در نظر بگیرید:
<img src=’123’ onerror=’alert(document.cookie)’>
- این یک تگ image ساده است که یک خصوصیت src دارد که میتواند هر چیزی باشد. از آنجایی که کد فوق یک آدرس اینترنتی معتبر نیست خطایی ایجاد خواهد کرد که توسط دستیار onerror مدیریت میشود. هکر میتواند در اینجا هر کد جاوا اسکریپتی را اجرا کند. در مثال بالا ما تنها از کد نمایش کوکی استفاده کردهایم، اما هکر میتواند این کوکیها را برای خود ارسال کرده و از آن استفاده کند. چنین فعالیتهای مخربی دور از انتظار نیست، مگر آنکه توسعهدهندگان وبسایتها از کدهای دقیقی استفاده کرده باشند
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟