مقدمه
اگر تاکنون از وبسایتهای مختلف بازدید کردهاید، احتمالاً با اصطلاح کوکیها (Cookies) برخورد کردهاید. کوکیها بخش مهمی از تجربه وب هستند و به مرورگر و سرور کمک میکنند تا اطلاعاتی مانند نشستهای کاربری و ترجیحات کاربر را ذخیره و مدیریت کنند. در این مقاله، به بررسی کاربرد کوکیها در HTTP میپردازیم و توضیح میدهیم که کوکیها چگونه به بهبود تجربه کاربری و عملکرد سایتها کمک میکنند.
در مقاله های قبلی در مورد پروتکل HTTP بصورت کامل صحبت کرده ایم در مقاله پروتکل HTTP چیست؟ می توانید بصورت کامل با HTTP آشنا شوید.
کوکیهای HTTP: نگاهی دقیقتر
کوکیهای HTTP بخش ضروری وب مدرن هستند - زمانی که کاربر از تقریبا هر وب سایتی بازدید میکند، با یک پنجره رضایت کوکی مواجه میشود. با ظهور ردیابی بین سایتی و شبکههای تبلیغاتی، کوکیها به دغدغه حفظ حریم خصوصی کاربر تبدیل شدند. پس کوکیهاHTTP چه هستند و چه نقشی در مرورگر وب کاربر ایفا میکنند؟ برای ذخیره داده چقدر مهم هستند؟ کوکیهای اولیه و شخص ثالث چگونه با هم تفاوت دارند؟ توسعه دهندگان وب چگونه باید آنها را به درستی ایجاد کنند؟ در این راهنما، ما نگاهی دقیقتر به این فناوری میاندازیم و به تمام این سوالات پاسخ میدهیم.
کوکیهای HTTP چیست؟
یک کوکی HTTP یک بسته داده کوچک است که بین مرورگر وب (به عنوان مثال موزیلا فایرفاکس) و سرور وب هدف (به عنوان مثال wikipedia.org) رد و بدل میشود. هنگام اولین بازدید از وب سایت، مرورگر شما یک فایل کوکی ایجاد میکند و پارامترهای آن (به عنوان مثال هدرهای HTTP) را روی دیسک شما ذخیره میکند. از هر کوکی برای ذخیره وضعیت جلسه داده شده، یعنی دادههایی که مرورگر شما در حال حاضر از آنها استفاده میکند، استفاده میشود. ممکن است افراد به آنها به عنوان «کوکیهای وب»، «کوکیهای اینترنتی» و «کوکیهای مرورگر» نیز اشاره کنند.
بیایید نگاهی به خود فایل کوکی بیندازیم - این کار را میتوان از طریق ابزار توسعهدهنده مرورگر شما انجام داد که معمولاً با فشار دادن F12 قابل دسترسی است. برای مثال در گوگل کروم، میتوانید به تب Application (آن را از منوی بالا انتخاب کنید) بروید و زیرمنوی Cookies را باز کنید (آن را از لیست سمت چپ انتخاب کنید). این کار جدولی را به شما نشان میدهد که حاوی تمام کوکیهای اولیه و شخص ثالث است که مرورگر شما در وبسایت موردنظر به دست آورده است
منوی کوکی در ابزار برنامهنویس کروم همچنین می توانیم ببینیم که هر کوکی HTTP دارای پارامترهای خاصی است مانند:
Name: نام کوکی
value: مقدار کوکی.
Domain: سرورهایی را هدف قرار می دهد که می توانند کوکی داده شده را بدست آورند.
Expires / Max-Age: تاریخ انقضای کوکی یا ویژگی حداکثر سن. اندازه: اندازه کوکی، بر حسب بایت.
و اطلاعات دیگری.
چرا به آن "کوکی" میگویند؟
نام این فناوری با کوکی-شیرینی پخته شده گره خورده است، بنابراین طراحان همیشه آیکونهایی از این میان وعدهها را به پنجرههای پاپآپ رضایت کوکی اضافه میکنند. در اینجا توضیحی ارائه میشود: کوکیهای شانس (آنهایی که حاوی پیامهایی روی یک کاغذ در داخل آنها هستند) الهامبخش اصطلاح یونیکس کوکیهای جادویی شدند که نشاندهنده قطعه کوچکی از داده مبادله شده بین برنامههای کامپیوتری بود.
نحوه عملکرد کوکیهای HTTP
ارسال کوکی توسط سرور
هنگامی که کاربر از یک وبسایت بازدید میکند، سرور وب میتواند یک هدر HTTP Set-Cookie در پاسخ ارسال کند. این هدر حاوی نام و مقدار کوکی و همچنین سایر ویژگیهای اختیاری مانند Expires، Max-Age، Domain، Path و Secure است. به عنوان مثال، یک هدر Set-Cookie ساده ممکن است به این شکل باشد:
Set-Cookie: sessionId=abc123; Expires=Wed, 09 Jun 2021 10:18:14 GMT
این دستور به مرورگر کاربر میگوید که کوکی را ذخیره کند و آن را با درخواستهای بعدی به همان دامنه به سرور بازگرداند.
ذخیره و ارسال کوکیها توسط مرورگر
مرورگر مدیریت کوکی را به صورت محلی روی دستگاه کاربر انجام میدهد. کوکیها با دامنهای که از آن آمدهاند مرتبط هستند و مرورگر اطمینان حاصل میکند که فقط کوکیهای مطابق با دامنه و مسیر درخواستهای بعدی در هدر HTTP Cookie گنجانده شدهاند.
هنگامی که کاربر درخواست دیگری به همان دامنه میدهد، مرورگر کوکیهای ذخیره شده را در هدر درخواست مانند زیر گنجانده است:
Cookie: sessionId=abc123
به این ترتیب، سرور اطلاعات کوکی را با هر درخواست دریافت میکند و این امکان را برای او فراهم میکند تا یک جلسه با حالت با مرورگر حفظ کند.
تشخیص و شناسایی کاربران
کوکیها به وبسایتها اجازه میدهند تا با اختصاص یک شناسه منحصر به فرد (معمولاً یک رشته تصادفی) کاربران را تشخیص دهند. هنگامی که کاربر به یک وبسایت باز میگردد، سرور میتواند شناسه منحصر به فرد را از کوکی بخواند و آن را با جلسه قبلی کاربر مطابقت دهد. این امکان را برای سرور فراهم میکند تا یک تجربه شخصیسازی شده ارائه دهد، مانند به خاطر سپردن ترجیحات کاربر، حالتهای ورود به سیستم و ارائه محتوای هدفمند. کوکیهای ردیابی، به ویژه، میتوانند فعالیت مرور یک کاربر را در سایتهای مختلف دنبال کنند که برای تبلیغات هدفمند و تجزیه و تحلیل استفاده میشود.
وبسایتها با استفاده از کوکیها میتوانند جلسات کاربر را حفظ کنند، ترجیحات کاربر را ذخیره کنند و رفتار کاربر را ردیابی کنند که برای ارائه یک تجربه وب بینقص و شخصیسازی شده ضروری است.
هدف از کوکیهای HTTP
به لطف کوکیهای HTTP، اهداف برنامههای وب مدرن به طور قابل توجهی با برنامههای وب نسخه ۱.۰ متفاوت است – آنها تعاملی و پویا هستند و عامل جذابیت استفاده از این برنامهها به شمار میروند: خرید سریعتر میشود، ورود به سیستم آسانتر میشود و پلتفرمهای بزرگ مانند گوگل به طرز عجیبی در هدفگذاری تبلیغات برای شما مهارت پیدا میکنند.
شخصیسازی
کوکیها تعیین میکنند که آیا کاربر تم روشن یا تیره را میخواهد.
در حالی که وبسایتهای قدیمی و استاتیک روز به روز ثابت میمانند، هر کوکی HTTP به ایجاد توهمی از آشنایی وبسایتهای مدرن با شما (یعنی شخصیسازی) کمک میکند و محتوای مرتبطتری را به شما نمایش میدهد هر چه بیشتر به مرور آنها بپردازید. وبسایتها معمولاً منوهای تخصصی برای سفارشیسازی ظاهر خود (مانند اندازه فونت)، زبان و قابلیتها ارائه میدهند: به عنوان مثال، تنظیمات کاربری DuckDuckGo به شما اجازه میدهد تا رنگهای صفحه وب را انتخاب کنید و این دادهها را در فایل کوکی ذخیره میکند، که میتواند در بازدید بعدی توسط مرورگر دسترسی پیدا شود.
مدیریت حالت/جلسه
کوکیها به کاربران کمک میکنند به طور خودکار وارد شوند.
هدف اصلی کوکیها درک مفهوم سبد خرید آنلاین بود – یک ویژگی ساده در وبسایت که قبلاً بدون راهی برای تبادل داده بین مرورگر و سرور وب امکانپذیر نبود. امروزه، سرور هر بار که کاربر درخواست میدهد، کوکیهای شناسایی جلسه را با کاربر تبادل میکند، در حالی که سرور تمام دادههای سبد خرید کاربران را در پایگاهداده خود ذخیره میکند. بدین ترتیب، میتواند با استفاده از یک کوکی با شناسایی جلسه، سبد خرید صحیح را نمایش دهد.
شناساییکنندهها همچنین به مدیریت جلسه و جلسات ورود کمک میکنند: هنگام باز کردن یک پنجره ورود، مرورگر کوکی با یک شناساییکننده جلسه منحصر به فرد کاربر دریافت میکند. اگر کاربر بتواند وارد شود، سرور کاربر را وارد کرده و جلسه را با کوکی مربوطه مرتبط میسازد.
پیگیری کاربران
کوکیها کاربر را در چندین وبسایت پیگیری میکنند.
شناساییکنندههای یکسان میتوانند برای نظارت بر تاریخچه مرور کاربر در چندین وبسایت استفاده شوند – و به این ترتیب پیگیری کاربران متولد شد: در بیشتر موارد، این کوکیهای شخص ثالث هستند که ارزشی برای کاربر نهایی (از طریق شخصیسازی وبسایت یا مدیریت جلسه) ایجاد نمیکنند و فقط آنها را پیگیری میکنند.
اگرچه کوکیهای پیگیری به خودی خود "شیطانی" نیستند، اما در معرض سو استفادههای جدی هستند وقتی که تبلیغکننده بخواهد حتی پول بیشتری به دست آورد.
مجموعهای از انواع کوکیها
دو نوع اصلی کوکی، کوکیهای جلسه و کوکیهای دائمی، موارد استفاده و ویژگیهای متفاوتی دارند. بیایید به تفصیل به آنها بپردازیم:
کوکیهای جلسه
کوکیهای جلسه، که به عنوان کوکیهای موقتی نیز شناخته میشوند، کوکیهای موقتی هستند که پس از یک جلسه مرورگر حذف میشوند. هدف اصلی کوکی جلسه، ذخیرهسازی دادههای فعالیت و سادهسازی ناوبری کاربر است تا صفحات وب در طول یک جلسه مرور سریعتر بارگذاری شوند.
نمونههایی از موارد استفاده کوکیهای جلسه:
عملکرد سبد خرید: کوکیهای جلسه میتوانند اقلام اضافه شده به سبد خرید را در طول یک جلسه مرور ذخیره کنند.
گواهینامههای ورود: آنها میتوانند گواهینامههای ورود یک کاربر را برای مدت زمان یک جلسه ذخیره کنند و ناوبری بدون نیاز به ورود مجدد را ممکن سازند.
کوکیهای دائمی
کوکیهای دائمی ترجیحات را در طول جلسات ذخیره میکنند، بنابراین روی دستگاه ذخیره شده و تا زمان انقضا باقی میمانند، یعنی حتی پس از بستن مرورگر نیز در دسترس هستند. مدت زمان آنها توسط ویژگیهای Max-Age یا Expires تعیین میشود. برخلاف کوکیهای جلسه که در حافظه ذخیره میشوند، کوکیهای دائمی روی هارد دیسک کاربر ذخیره میشوند.
کوکیهای اول شخص
کوکی اول شخص، همانطور که از نامش پیداست، از یک طرف اول ایجاد میشود: در صورت مرور وب، این کوکیها توسط خود وبسایت/دامنه ارسال میشوند. کوکیهای اول شخص برای عملکرد اهمیت دارند، زیرا وبسایتها معمولاً برای ارائه موارد زیر به آنها وابستهاند:
ورود خودکار با ترکیب نام کاربری/گذرواژه،
ترجیحات وبسایت،
لینکهای بازدید شده (به رنگ بنفش نشان داده میشوند)،
تنظیمات ذخیره شده،
اقلام سبد خرید،
و موارد دیگر.
کوکیهای شخص ثالث
برعکس، کوکیهای شخص ثالث توسط دامنههای دیگر ایجاد میشوند: به عنوان مثال، بازدید از دامنه abc.com ممکن است فایلهای کوکی برای ردیابی تبلیغات از دامنه xyz.com ایجاد کند. کوکیهای شخص ثالث معمولاً به عملکرد وبسایت مربوط نمیشوند؛ بلکه شناسههای منحصر به فرد کاربران را جمعآوری میکنند تا ردیابی آنها را در مقیاس بزرگ ممکن سازند.
علاوه بر این، یک کوکی شخص ثالث ممکن است حتی پس از راهاندازی مجدد یا خاموش شدن دستگاه کاربر، بر روی دستگاه او باقی بماند، که به تبلیغکنندگان این امکان را میدهد تا فعالیت کاربر را در وبسایتهای دیگر ردیابی کنند. به عنوان مثال، آنها میتوانند تبلیغ یک محصول را نشان دهند و بعداً با استفاده از کوکیهای شخص ثالث بررسی کنند که آیا کاربر آن را خریداری کرده است. اغلب، این نوع کوکیها نگرانیهای مربوط به حریم خصوصی را ایجاد میکنند و نیاز به گزینههای مسدود کردن خاص در مرورگر دارند.
کوکیهای امن
در یک اسکرین شات قبلی، ممکن است متوجه شده باشید که یک کوکی ممکن است ویژگی Secure داشته باشد. اگر این ویژگی True باشد، درخواست HTTP حاوی کوکی از پروتکل امن (مانند HTTPS) برای تبادل داده استفاده میکند. اینگونه، کوکیهای امن راهی برای محافظت از محرمانگی دادههای خود دارند.
با این حال، مکانیسمهای امنیتی یک کوکی میتوانند از طریق تهدیدات شبکه، تهدیدات سیستمهای انتهایی، جعل درخواستهای بینسایت و جمعآوری کوکیها دور زده شوند، که این امر به مهاجم اجازه میدهد دادههایی مانند جزئیات ورود و شناسههای جلسه را رهگیری کند. به همین دلیل، برخی از برنامهنویسان مرورگر وب توصیه میکنند از ارسال اطلاعات حساس از طریق کوکیها خودداری کنید.
کوکیهای زامبی
همانطور که از نامش پیداست، کوکیهای زامبی پس از حذف دوباره به زندگی برمیگردند: در حالی که یک کوکی معمولی به گونهای طراحی شده است که به حریم خصوصی کاربر احترام بگذارد، همتای زامبی آن تمامی محدودیتها را نادیده میگیرد: علاوه بر "تولد دوباره"، میتواند در چندین مکان ذخیره شود و از کنترل کاربر بر دادههای وب جلوگیری کند. بهویژه، کوکیهای شخص ثالث اغلب از مکانیسم "زامبی" برای افزایش کارایی خود استفاده میکنند.
بسیاری از کاربران که به حریم خصوصی اهمیت میدهند، کوکیهای وب را رد کرده یا آنها را بهطور منظم حذف میکنند. این موضوع برای شبکههای تبلیغاتی که از کوکیهای ردیابی برای نظارت بر رفتار کاربر در خدمات مختلف استفاده میکنند، نگرانکننده است. یک کوکی زامبی راهحلی مؤثر، اگرچه از نظر اخلاقی مشکوک، برای این مشکل است: آنها نظارت بر ترافیک وب را در وبسایتهای مختلف با بهدستآوردن شناسههای منحصر به فرد کاربر که برای وبسایتهای دیگر طراحی شدهاند، ممکن میسازند. علاوه بر این، آنها ممکن است از محدودیتهای مرورگر یک کاربر خاص چشمپوشی کنند و آنها را در کل دستگاه ردیابی کنند.
این شیوههای مشکوک عمدتاً دلیل انتقادات به کوکیها بهطور کلی هستند و منجر به تدوین تعدادی مقررات حمایت از حریم خصوصی مانند قانون کوکیهای اتحادیه اروپا (که به عنوان دستورالعمل ePrivacy نیز شناخته میشود)، GDPR و موارد دیگر شدهاند.
برای آشنایی بیشتر با هدرهای http به مقاله کاربرد Header در Http مراجعه کنید.
ویژگیهای کوکی HTTP
بخش عمدهای از عملکرد و ویژگیهای کوکیها در ویژگیهای خاص آنها نهفته است. در اینجا نحوه عملکرد آنها آمده است:
دامنه
ویژگی Domain مشخص میکند که کدام میزبانها (دامنهها) اجازه دریافت کوکی را دارند. اگر یک کوکی دارای ویژگی Domain برای یک دامنه خاص تنظیم شده باشد، در آن صورت همچنین در دسترس تمام زیر دامنههای آن دامنه خواهد بود. به عنوان مثال:
اگر کوکی با Domain=example.com تنظیم شود، با درخواستها به example.com و همچنین هر زیر دامنهای مانند sub.example.com ارسال خواهد شد.
اگر ویژگی Domain مشخص نشده باشد، کوکی فقط به سروری که آن را تنظیم کرده است بازگردانده میشود و نه به هیچ زیر دامنهای.
“سطلها" معمولاً به دستهبندی یا گروهبندی کوکیها بر اساس ویژگیها یا سیاستهای خاص اشاره دارند. اگرچه اصطلاح "سطل" جزو بخشهای رسمی مشخصات نیست، اما گاهی بهطور غیررسمی برای توصیف چگونگی مدیریت و محدود کردن تعداد کوکیهای ذخیرهشده برای هر دامنه توسط مرورگرها استفاده میشود. این کار به جلوگیری از استفاده بیش از حد منابع و مشکلات احتمالی عملکرد کمک میکند.
زیر دامنهها بخشی از دامنه بزرگتر هستند و معمولاً برای سازماندهی بخشهای مختلف یک وبسایت یا میزبانی خدمات مختلف استفاده میشوند. کوکیها میتوانند بهگونهای تنظیم شوند که توسط دامنه اصلی و تمام زیر دامنههای آن در دسترس باشند.
مسیر
ویژگی Path مشخص میکند که مسیر URL باید در URL درخواستشده وجود داشته باشد تا مرورگر هدر کوکی را ارسال کند. Path دامنه کوکی را تعریف میکند: به مرورگر میگوید که کدام مسیرها در سرور باید کوکی را در درخواست HTTP شامل کنند. مقدار پیشفرض ویژگی Path، مسیر URL است که مرورگر هنگام دریافت کوکی از آن استفاده کرده است. اگر کوکی با Path=/docs تنظیم شده باشد، کوکی در درخواستها به /docs و هر زیر دایرکتوری مانند /docs/subdirectory گنجانده میشود.
با تنظیم ویژگی Path، میتوانید کنترل کنید که کوکی به کجا ارسال میشود و از ارسال آن به هر صفحه در دامنهتان جلوگیری کنید، که میتواند امنیت و عملکرد را بهبود بخشد. به یاد داشته باشید، هر چه مسیر خاصتر باشد، دامنه کوکی محدودتر خواهد بود.
تاریخ انقضا و Max-Age
ویژگیهای Expires و Max-Age برای کنترل عمر یک کوکی استفاده میشوند و تعیین میکنند که کوکی باید به مدت چه مدت بر روی دستگاه کلاینت ذخیره شود قبل از اینکه حذف شود. ویژگی Expires تاریخ و زمان انقضای یک کوکی را به عنوان یک زمانسنج HTTP تعیین میکند و هنگامی که تاریخ و زمان مشخص شده به پایان میرسد، کوکی بهطور خودکار از دستگاه کلاینت حذف میشود. اگر ویژگی Expires تنظیم نشده باشد، کوکی به عنوان یک کوکی جلسه در نظر گرفته میشود و زمانی که جلسه مرورگر به پایان برسد حذف میشود.
ویژگی Max-Age حداکثر عمر کوکی را به ثانیهها تعریف میکند و تعداد ثانیههایی که از زمان تنظیم کوکی تا انقضا آن باقی مانده را نشان میدهد. اگر هر دو ویژگی Expires و Max-Age تنظیم شوند، Max-Age اولویت دارد و Expires نادیده گرفته میشود.
کوکیهای دائمی شامل ویژگی Expires یا Max-Age هستند و حتی پس از بسته شدن مرورگر بر روی دستگاه کاربر ذخیره میشوند تا زمانی که منقضی شوند. از طرف دیگر، کوکیهای جلسه هیچ ویژگی Expires یا Max-Age ندارند و هنگامی که کاربر مرورگر خود را میبندد یا زمانی که جلسه به پایان میرسد حذف میشوند.
SameSite
ویژگی SameSite به سرورها اجازه میدهد مشخص کنند که آیا کوکیها باید با درخواستهای بینسایت ارسال شوند یا خیر (جایی که سایت با دامنه قابل ثبت و پروتکل: http یا https تعریف میشود). این ویژگی در برابر حملات جعل درخواستهای بینسایت (CSRF) محافظت میکند.
مفهوم "سایت" به ترکیب پسوند دامنه خاص و بخشی از دامنه که بلافاصله قبل از آن قرار دارد اشاره دارد. به عنوان مثال، اگر کاربری در www.web.dev باشد و از static.web.dev تصویری درخواست کند، این درخواست به عنوان یک درخواست همانسایت در نظر گرفته میشود. فهرست پسوند عمومی تعیین میکند که کدام صفحات به عنوان بخشی از یک وبسایت به حساب میآیند. این فهرست شامل دامنههای سطح بالا مانند .com و همچنین خدماتی مانند github.io است. این اجازه میدهد زیر دامنههایی مانند your-project.github.io و my-project.github.io بهعنوان سایتهای جداگانه به حساب بیایند.
ویژگی SameSite میتواند سه مقدار ممکن را بپذیرد:
Strict: برای کوکیهای مرتبط با ویژگیهایی که همیشه در پشت یک ناوبری اولیه قرار دارند، مانند تغییر رمز عبور یا خرید. این کوکیها فقط میتوانند در یک زمینه اول شخص ارسال شوند.
Lax: اجازه میدهد کوکیها با ناوبریهای سطح بالا ارسال شوند و نسبت به Strict کمتر محدودکننده است. این برای ترجیحات یا ویژگیهایی که کاربران انتظار دارند در صفحات مختلف کار کنند مناسب است.
None: برای سناریوهایی که کوکیها باید بین دامنههای شخص ثالث مختلف به اشتراک گذاشته شوند ضروری است (مانند ویجتهای جاسازیشده، تجزیه و تحلیلهای بینسایت).
نحوه ایجاد کوکیهای HTTP
برای درک بهتر نحوه عملکرد کوکیها، میتوانیم آنها را به صورت دستی ایجاد کنیم: یکی از گزینهها استفاده از مرورگر وب است؛ گزینه دیگر استفاده از سرور وب برای تنظیم هدر کوکی است.
سمت کلاینت
برای این روش، به ویژگی document.cookie و هر مرورگر وب نیاز داریم – به عنوان مثال، گوگل کروم. بیایید ابزار توسعهدهنده کروم (F12) را باز کنیم، به تب Console برویم و تایپ کنیم:
document.cookie="testcookie=1"
حالا بیایید بررسی کنیم که آیا کوکی آزمایشی ما به درستی اضافه شده است. در تب منوی Application، منوی Cookies را در سمت چپ انتخاب کنیم. بیایید در لیست به دنبال کوکی آزمایشی خود بگردیم:
کوکی آزمایشی در لیست موجود است
این هم هست! ما به طور موفقیتآمیز آن را ایجاد کردیم.
سمت سرور وب
ایجاد کوکیها در بکاند یک گزینه متداولتر است و رویکردهای مختلفی برای این کار دارد: جاوا اسکریپت یا پایتون، کد بکاند خود یا سرور وبی مانند Nginx و غیره. در هر صورت، بکاند کوکیها را در پاسخ HTTP تنظیم میکند و سپس سرور دادهها را به کاربر ارسال میکند.
میتوانیم با یک اسکریپت HTML ساده شروع کنیم:
html
Copy code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-compatible" content ="ie=edge">
<title>Document</title>
</head>
<body>
<button id='btnCreateCookie'>Create Cookie</button>
<script>
const btnCreateCookie = document.getElementById("btnCreateCookie");
btnCreateCookie.addEventListener("click", e => document.cookie = "example-3");
</script>
</body>
</html>
سپس میتوانیم از Node.js برای ارسال اسکریپت HTML از طریق یک برنامه index.js استفاده کنیم:
javascript
Copy code
const app = require("express")();
app.get("/", (req, res) => {
res.sendFile(`${__dirname}/index.html`);
});
app.listen(8080, () => console.log("listening on port 8080"));
با اجرای اسکریپت، میتوانید با فشار دادن دکمه یک کوکی ایجاد کنید. اگر نمیخواهید کد جاوا اسکریپت را بهصورت دستی تایپ کنید، میتوانید یک آرایه وارد کنید:
javascript
Copy code
const app = require("express")();
app.get("/", (req, res) => {
res.setHeader("set-cookie", ["setfromserver=1"]);
res.sendFile(`${__dirname}/index.html`);
});
app.listen(8080, () => console.log("listening on port 8080"));
مسائل امنیتی و حریم خصوصی
بیایید به جنبههای امنیتی و حریم خصوصی مرتبط با کوکیها بپردازیم:
حملات XSS
مهاجمان از آسیبپذیریهای XSS برای وارد کردن اسکریپتهای مخرب به صفحات وب استفاده میکنند. بدین ترتیب، آنها میتوانند کوکیها را از مرورگر کاربران دیگر سرقت کنند. کوکیهای سرقتشده به مهاجمان این امکان را میدهد که خود را به عنوان کاربران معتبر جا بزنند، تراکنشهای غیرمجاز انجام دهند یا حسابهای کاربری را دستکاری کنند.
سرقت جلسه (سمت زدن کوکی)
در حملات سرقت جلسه، مهاجمان کوکیهای واقعی را دستکاری میکنند تا به دسترسی غیرمجاز یا نقض دادهها دست یابند. آنها کوکیها را قبل از ارسال به سرور رهگیری میکنند یا کوکیهای جعلی ایجاد میکنند تا خود را به جای کاربران جا بزنند. موفقیت در سمت زدن کوکیها امکان دور زدن اقدامات امنیتی و دسترسی غیرمجاز به جلسات کاربری را فراهم میکند.
تکنیکهای ایمنسازی کوکیها:
استفاده از HTTPS: همواره صفحات وب خود را از طریق HTTPS سرو کنید. کوکیهای امن باید فقط از طریق کانالهای رمزگذاریشده (HTTPS، WSS) منتقل شوند تا از شنود و رهگیری جلوگیری شود.
تنظیم ویژگیهای Secure و HttpOnly: از ویژگی Secure برای اطمینان از اینکه کوکیها فقط از طریق اتصالات امن ارسال میشوند استفاده کنید. ویژگی HttpOnly را تنظیم کنید تا دسترسی اسکریپتهای سمت کلاینت (مانند جاوا اسکریپت) به کوکیها ممنوع شود و خطر حملات XSS کاهش یابد.
پیادهسازی ویژگی SameSite: ویژگی SameSite زمان ارسال کوکیها در درخواستهای بینسایت را کنترل میکند. از SameSite=Lax یا SameSite=Strict برای محدود کردن انتقال کوکیهای بینسایت استفاده کنید. فقط برای کوکیهایی که نیاز به دسترسی بینسایت دارند (مانند ویجتهای جاسازیشده) از SameSite=None استفاده کنید و آن را با Secure تنظیم کنید تا از HTTPS اطمینان حاصل شود.
نحوه مدیریت کوکیهای HTTP
مدیریت کوکیها برای حفظ حریم خصوصی و امنیت ضروری است. بیایید بررسی کنیم که کاربران چگونه میتوانند کوکیها را از طریق تنظیمات مرورگر خود کنترل کنند. با این حال، به یاد داشته باشید که مسدود کردن و حذف کوکیها میتواند محدودیتهایی در عملکرد وبسایت ایجاد کند.
مرورگرها چندین درجه از حفاظت کوکی ارائه میدهند – شما معمولاً میتوانید یکی از این گزینهها را انتخاب کنید:
اجازه دادن به همه کوکیها: همه کوکیها، از جمله ردیابهای شخص ثالث، را فعال میکند.
مسدود کردن کوکیهای شخص ثالث در حالت ناشناس: ردیابهای شخص ثالث را در حالت ناشناس مسدود میکند.
فقط مسدود کردن کوکیهای شخص ثالث: کوکیهای ردیابی بالقوه را مسدود میکند.
مسدود کردن همه کوکیها: تمام کوکیها را غیرفعال میکند.
گوگل کروم
روی سه نقطه عمودی در گوشه بالا سمت راست کلیک کنید.
تنظیمات را انتخاب کنید.
زیر بخش حریم خصوصی و امنیت، روی تنظیمات سایت کلیک کنید.
گزینه کوکیها و سایر دادههای سایت را انتخاب کنید.
تنظیمات کوکیها را بر اساس ترجیحات خود تنظیم کنید.
مایکروسافت اج
روی سه نقطه افقی در گوشه بالا سمت راست کلیک کنید.
تنظیمات را انتخاب کنید.
به بخش کوکیها و مجوزهای سایت بروید.
میتوانید کوکیها را از آنجا مدیریت کنید.
موزیلا فایرفاکس
روی سه خط افقی در گوشه بالا سمت راست کلیک کنید.
گزینهها را انتخاب کنید.
به بخش حریم خصوصی و امنیت بروید.
در زیر کوکیها و دادههای سایت، تنظیمات دلخواه خود را انتخاب کنید.
اپل سافاری
در نوار منو روی Safari کلیک کنید.
ترجیحات را انتخاب کنید.
به تب حریم خصوصی بروید.
تنظیمات کوکی را بر اساس نیازهای خود تنظیم کنید.
کوکیها در وباسکرپینگ
کوکیها نقش قابل توجهی در تقلید رفتار انسانی و دور زدن تکنولوژیهای ضد اسکرپینگ (مانند تشخیص ربات) دارند. بسیاری از این ویژگیها به API وباسکرپر Infatica کمک میکنند تا دادهها را به شکل مؤثرتری جمعآوری کند:
شناسایی و مسدود کردن رباتهای مخرب
مقالات مرتبط با شناسایی رباتها به شما کمک میکنند تا از تقلب و تهدیدات امنیتی محافظت کنید. بیاموزید که چگونه رباتها را در وبسایت، برنامه یا API خود شناسایی کنید و کسب و کار آنلاین خود را از تهدیدات محافظت کنید.
تقلید رفتار انسانی
هدر User-Agent: وبسایتها اغلب از هدر User-Agent برای شناسایی کلاینت (مرورگر یا ربات) استفاده میکنند که درخواست HTTP را ارسال میکند. با تغییر دستی هدر User-Agent در کد وباسکرپینگ، میتوانید یک مرورگر وب یا دستگاه معمولی را تقلید کنید و درخواستها را شبیه به کاربران واقعی جلوه دهید.
اجرا کردن جاوا اسکریپت: برخی وبسایتها برای بارگذاری محتوای دینامیک به جاوا اسکریپت وابستهاند. برای اینکه شبیه انسان به نظر برسند، وباسکرپرها میتوانند کد جاوا اسکریپت را اجرا کنند (با استفاده از ابزارهایی مانند Puppeteer یا Playwright) تا با صفحه تعامل کنند، دکمهها را کلیک کنند، اسکرول کنند و منتظر بارگذاری عناصر بمانند.
حرکتهای موس و تأخیرها: معرفی حرکتهای تصادفی موس و تأخیر بین درخواستها میتواند الگوهای مرور انسانی را شبیهسازی کند. رباتها میتوانند نشانگر را به آرامی حرکت دهند یا قبل از انجام درخواستهای HTTP بعدی توقف کنند.
دور زدن تدابیر ضد اسکرپینگ
چرخش آدرسهای IP: وباسکرپرها میتوانند از چندین آدرس IP (از طریق پروکسیها یا VPNها) برای جلوگیری از شناسایی استفاده کنند. چرخش IPها باعث میشود که وبسایتها نتوانند فعالیت اسکرپینگ را از یک منبع واحد پیگیری کنند.
اجتناب از دامهای مخفی: برخی وبسایتها دامهای مخفی (صفحات جعلی) برای به دام انداختن اسکرپرها راهاندازی میکنند. با تحلیل ساختار HTML، اسکرپرها میتوانند از دسترسی به این دامها اجتناب کنند.
مدیریت CAPTCHAها: CAPTCHAها (تست تورینگ عمومی کاملاً خودکار برای تمایز بین رایانهها و انسانها) اقدامات رایج ضد ربات هستند. تکنیکهای دور زدن CAPTCHA شامل استفاده از حلکنندههای CAPTCHA، پروکسیهای هوشمند، OCR (تشخیص کاراکتر نوری) و الگوریتمهای یادگیری ماشین است.
ذخیره کوکیها
کوکیها اطلاعات جلسه را ذخیره میکنند. با ذخیره و استفاده مجدد از کوکیها در درخواستها، اسکرپرها میتوانند وضعیت را حفظ کرده و شبیه به کاربران بازگشتی به نظر برسند.
اجتناب از دامهای پنهان
برخی وبسایتها شامل لینکها یا فرمهای مخفی هستند که ممکن است رباتها بهطور تصادفی آنها را فعال کنند. منطق اسکرپر باید از تعامل با عناصر مخفی اجتناب کند.
نتیجهگیری
اگرچه کوکیها در سالهای اخیر مرکز جنجال بودهاند، اما هنوز بخش جداییناپذیر از وب مدرن هستند: بدون آنها، مرور وبسایتها زمان بیشتری خواهد برد و توسعه وب در زمینه عملکرد وبسایت محدود خواهد بود. ایجاد و مدیریت صحیح یک کوکی برای جمعآوری دادهها و کارهای مشابه بسیار مهم است – و ما امیدواریم این راهنما به شما کمک کرده باشد که این موضوع را بهتر درک کنید.
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید