شاید این سوال ایجاد شود که دلیل جلوگیری از کش شدن چیست؟ به فرآیند ذخیرهسازی اطلاعات در حافظه برای دسترسی سریعتر، کش (cache) گفته میشود. در وردپرس، کش میتواند برای ذخیرهسازی محتوای صفحه، مانند متن، تصاویر و CSS مورد استفاده قرار گیرد. این کار موجب خواهد شد که سرعت لود سایت برای کاربران بیشتر شود اما استفاده از کش وردپرس ممکن است اطلاعات حساس را در دسترس افراد غیرمجاز قرار دهد. شاید تصور کنید که سایت شما امن است اما مهاجمان میتوانند از فریب کش وب (web cache deception) استفاده کنند تا سرورهای کش را مجبور به ذخیره و افشای اطلاعات حساس نمایند.
کش چیست و چرا به جلوگیری از کش نیاز دارید؟
کش وردپرس یک ابزار قدرتمند برای بهبود عملکرد سایت است و با ذخیره نسخه های کپی از محتوای وب سایت در حافظه، می تواند بار روی سرور و پایگاه داده را کاهش دهد، سرعت لود صفحه را بهبود بخشد و در پهنای باند صرفه جویی کند. با این حال، کش می تواند یک خطر امنیتی نیز باشد. اگر اطلاعات حساس مانند جزئیات پرداخت یا رمزهای عبور در کش ذخیره شوند، مهاجمان می توانند از آنها برای دسترسی غیرمجاز به سایت شما استفاده کنند. مزایای فعالسازی حافظه کش را نمی توان نادیده گرفت و با پیکربندی دقیق و جلوگیری از کش شدن هرگونه اطلاعات شخصی، محرمانه یا ارزشمند، می توان از آن به خوبی بهره برد.
انواع کش وردپرس
هنگامی که در مورد کش صحبت می شود، کش سمت سرور (Server-side caching) و کش سمت کلاینت (Client-side caching) دو دسته اصلی هستند. تفاوت اصلی بین آنها در محل ذخیره شدن کش و افرادی که از آن سود می برند، خواهد بود.
تصویر(1)
کش سمت سرور معمولاً در وب سرور ذخیره می شود. این نوع کش می تواند بار روی سرور را کاهش دهد زیرا سرور نیازی به پردازش مجدد داده ها برای هر درخواست ندارد. همچنین کش سمت سرور می تواند سرعت لود صفحه را بهبود بخشد زیرا داده ها می توانند از سمت سرور سریع تر برای کاربر ارسال شوند.
کش سمت کلاینت معمولاً در مرورگر کاربر ذخیره می شود. این نوع کش می تواند سرعت لود صفحه را بهبود بخشد زیرا مرورگر نیازی به درخواست مجدد داده ها از سرور ندارد. کش سمت کلاینت می تواند مصرف پهنای باند شبکه را نیز کاهش دهد و داده ها فقط یک بار از سرور به مرورگر منتقل می شوند. جلوگیری از کش در این نوع، برخی مواقع نیاز خواهد بود.
- کش سمت سرور یا Server-side caching
Server-side caching توسط سروری که سرویس ها روی آن اجرا می گردند، مانند وب سرور یا سرور پایگاه داده انجام می شود. در این روش، سرور یک کپی از داده ها را در فضای ذخیره سازی موقت ذخیره می کند تا در دفعات بعد که به آن نیاز می شود، سریعتر فایل را اجرا نماید. در حال حاضر، این داده ها را می توان با استفاده از فناوری CDN در گره های لبه (edge nodes) نیز ذخیره کرد. برای مثال، وب سرور می تواند یک کپی از صفحه اصلی سایت را در حافظه کش ذخیره کند تا در مراجعات بعدی کاربری به آن صفحه، نیازی به پردازش مجدد توسط سرور نباشد. این کار می تواند بار روی سرور را تا 90 درصد کاهش دهد و سرعت بارگذاری صفحه را تا 3 برابر افزایش خواهد داد.
کش سمت سرور می تواند برای همه کاربرانی که به وب سایت دسترسی دارند، صرف نظر از دستگاه یا مرورگرشان، مفید باشد و به بهبود عملکرد وب سایت، کاهش بار روی سرور و پایگاه داده، صرفه جویی در پهنای باند و منابع و بهبود تجربه کاربری کمک کند.
هنگام کش کردن داده ها در سرور، بسته به نوع داده ای که در حافظه کش قرار می گیرد، روش های مختلفی وجود دارند که می توانید اتخاذ نمایید:
- مکانیزم کش داخلی پایگاه داده: کش داخلی پایگاه داده یک مکانیسم ذخیره سازی موقت است که در خود پایگاه داده اجرا می شود. این مکانیسم به پایگاه داده اجازه می دهد تا نتایج کوئری ها یا عملیات های پیچیده را در حافظه ذخیره کند و هر زمان که به آنها نیاز بود سریعتر بازیابی شوند. دو نوع اصلی کش داخلی پایگاه داده وجود دارد:
- کش کوئری: این نوع کش نتایج کوئری های پایگاه داده را ذخیره می کند.
- کش عملیات: این نوع کش نتایج عملیات های پیچیده پایگاه داده را ذخیره می نماید.
- Object caching: از این تکنیک جهت ذخیره سازی نتایج کوئری های پایگاه داده یا اشیاء PHP در حافظه سرور استفاده می گردد. این کار باعث می شود که نتایج کوئری ها یا اشیاء PHP بدون نیاز به اجرای مجدد کوئری پایگاه داده یا کد PHP، در دسترس باشند. Object caching می تواند مزایای زیادی را برای عملکرد وب سایت به همراه داشته باشد:
- کاهش زمان پاسخگویی کوئری ها و کد PHP
- افزایش کارایی وب سایت
- کاهش بار روی سرور
تصویر(2)
- Full-page caching: تکنیک Full-page caching، کل خروجی HTML یک صفحه وب را در دیسک یا حافظه (memory) سرور ذخیره می کند. این کار باعث می شود که صفحه وب بدون نیاز به پردازش مجدد کد PHP یا کوئری های پایگاه داده، مستقیماً به کاربر ارائه شود.
Full-page caching می تواند عملکرد وب سایت های استاتیک یا نیمه استاتیک را که به طور مکرر تغییر نمی کنند یا محتوای اختصاصی دارند، بهبود بخشد. با این حال، برای وب سایت هایی که محتوای آنها به طور مکرر تغییر می کند یا محتوای اختصاصی دارند، توصیه نمی شود.
- Client-side caching
کش سمت کاربر یا Client-side caching، در مرورگر یا برنامه دسکتاپ کاربر انجام می شود. در این حالت، مرورگر یک کپی از دادهها را در فضای ذخیرهسازی موقت روی دستگاه کاربر ذخیره میکند تا در دفعات بعد، صفحات سریعتر بازیابی شوند.
برای مثال، مرورگر می تواند تصاویر، فایل های CSS و JavaScript را در حافظه کش خود ذخیره کند تا در بازدیدهای بعدی کاربر از صفحه ای که این فایل ها را شامل می شود، نیازی به درخواست مجدد آنها از سرور نباشد. این کار می تواند زمان لود صفحه را تا 50 درصد کاهش و سرعت بارگذاری صفحه را تا 2 برابر افزایش دهد.
جلوگیری از کش و آنچه باید کش کرد
در بخش قبل، تکنیکهای مختلفی توضیح داده شد که میتوان از آنها جهت پیادهسازی کش برای وبسایت خود استفاده کرد. اگرچه تمامی این تکنیک ها سرعت سایت را افزایش می دهند اما باید جلوگیری از کش را مدنظر قرار دهید و تمام اطلاعات را ذخیره نکنید.
در وردپرس، توصیه می شود که اطلاعات خصوصی فقط در مرورگر کاربر ذخیره شود. این کار به دلایل امنیتی انجام می گردد. مرورگر کاربر در حال حاضر تمام اطلاعات مربوط به حساب او در وب سایت را دریافت می کند، بنابراین ذخیره داده ها در آن کاملاً قابل قبول است.
تصویر(3)
یکی از چالش های کش در وردپرس این است که تشخیص دهید کدام اطلاعات حساس هستند و کدام یک نیستند تا بتوانید جلوگیری از کش شدن را به درستی انجام دهید. به عنوان یک قانون کلی، هر اطلاعاتی که فقط برای کاربران وارد شده به سیستم قابل مشاهده است، باید خصوصی در نظر گرفته شود که شامل اطلاعات شخصی، محرمانه یا ارزشمند می باشند و نباید در معرض اشخاص غیرمجاز یا عموم قرار گیرند. برای نمونه:
- اطلاعات شخصی مانند نام کاربری، آدرس ایمیل و جزئیات پروفایل باید حساس تلقی شوند.
- رمزهای عبور و توکن های احراز هویت (authentication tokens) بسیار حساس هستند.
- اگر در وب سایت شما پرداخت انجام می شود، هرگونه اطلاعات مربوط به کارت های اعتباری، حساب های بانکی یا تراکنش های مالی بسیار حساس خواهند بود.
هر اطلاعاتی که بین همه کاربران مشترک بوده و نیازی به احراز هویت ندارد، می تواند در حافظه کش مشترک ذخیره شود یا از طریق CDN ارائه گردد. به عنوان مثال، می توانید فایل های CSS، کتابخانه های جاوا اسکریپت، فونت ها، تصاویر عمومی و غیره را کش کنید.
جلوگیری از کش شدن اطلاعات حساس
می توانید از هدرهای HTTP و متا تگ ها برای جلوگیری از کش شدن یک صفحه یا پست در وردپرس، استفاده کنید. این هدرها به مرورگرها نشان می دهند که چگونه محتوا را مدیریت و ذخیره کنند. هدرهای HTTP و متا تگ ها برای کنترل کش عبارتند از:
1. Pragma (منسوخ شده): Pragma یک هدر HTTP است که برای کنترل حافظه کش استفاده می شد. این هدر منسوخ شده است و دیگر توسط مرورگرها پشتیبانی نمی شود. بسیاری از مردم دستور no-cache را به همراه هدر پراگما به کار می برند و تصور می نمایند که این نوع کش را غیرفعال می کند اما این چنین نیست. دستور no-cache در هدر Pragma عمل نمی کند. این دستور فقط برای سازگاری با کش های HTTP/1.0 استفاده می شود.
توصیه می شود Pragma را کنار بگذارید و در صورت امکان، کد موجود را بروز کنید. می توانید از هدر Cache-Control برای کنترل حافظه Cache و جلوگیری از کش شدن استفاده نمایید.
تصویر(4)
2. Cache-Control: هدر Cache-Control برای کنترل رفتار حافظه کش در درخواست ها و پاسخ ها استفاده می شود. Cache-Control از دستورالعمل های مختلفی پشتیبانی می کند:
- no-cache: این دستورالعمل نشان می دهد که پاسخ را می توان در حافظه کش ذخیره کرد اما باید قبل از هر بار استفاده مجدد، توسط سرور مبدا اعتبارسنجی شود. این به معنای "جلوگیری از کش شدن" نیست بلکه امکان ایجاد کش با اعتبارسنجی مجدد را فراهم می کند.
- no-store: این دستورالعمل نشان می دهد که هیچ کشی (خصوصی یا اشتراکی) نباید پاسخ ها را ذخیره کند.
- private: نشان می دهد که می توان پاسخ را فقط در یک کش خصوصی (به عنوان مثال، حافظه کش مرورگر محلی) ذخیره کرد که برای محتوای اختصاصی کاربر مفید است.
- public: نشان می دهد که می توان پاسخ ها را در یک کش مشترک ذخیره کرد.
هنگامی که یک کش خصوصی برای کاربرانی که وارد سیستم شده اند پیاده سازی می کنید، می توانید حداکثر زمان (TTL) را از طریق تنظیمات حافظه کش Litespeed، تنظیم نمایید.
با این حال، یک محدودیت پیشفرض 1 ساعته برای کش خصوصی TTL وجود دارد. این محدودیت برای مدیریت کارآمد استفاده از دیسک است. هر کاربر دارای حافظه کش خصوصی می باشد و افزایش TTL می تواند منجر به رشد تصاعدی استفاده از دیسک شود.
کشینگ با استفاده از افزونه وردپرس
وردپرس این امکان را فراهم می کند تا وب سایت خود را بدون نیاز به دستکاری مستقیم در تنظیمات سرور، مدیریت کنید. این بدان معنا است که شما می توانید کش را از پیشخوان وردپرس خود با استفاده از یک افزونه تنظیم نمایید. افزونه های بسیاری مانند WP Super Cache، W3 Total Cache یا LiteSpeed Cache وجود دارند که می توانند به شما در مدیریت Cache و جلوگیری از کش شدن در وردپرس کمک کنند. این افزونه ها تنظیمات مشابهی برای کنترل کش سایت دارند.
تصویر(5)
در ادامه، تنظیمات مختلفی که میتوانید در افزونه LScache برای کش کردن دادههای خصوصی انجام دهید، ذکر شده است:
- کش کاربران وارد شده: این ویژگی به شما امکان میدهد تا ظاهر صفحات سایت را برای کاربرانی که وارد سیستم شدهاند به صورت خصوصی ذخیره کنید. به این معنا که هر کاربر وارد شده یک کش برای صفحاتی که بازدید می کند خواهد داشت و نمی تواند کش سایر کاربران را مشاهده کند.
- کش لینکهای خصوصی: می توانید مسیرهایی را تعیین کنید که حاوی اطلاعات حساس هستند و جلوگیری از کش شدن باید روی آنها اعمال شود. به عنوان مثال، اگر صفحه ای دارید که پروفایل یا تنظیمات کاربر را نشان می دهد، می توانید مسیر آن صفحه را در این بخش وارد کنید تا به صورت عمومی ذخیره نشود.
تصویر(6)
- Force Public Cache URIs: این تنظیمات به شما امکان می دهند تا مسیرهایی را مشخص کنید که صرف نظر از سایر تنظیمات، باید به صورت عمومی ذخیره شوند. به عنوان مثال، اگر صفحه ای دارید که به همه کاربران اطلاعات یکسانی نشان می دهد و به طور مکرر تغییر نمی کند، می توانید مسیر آن صفحه را در این بخش وارد کنید و به صورت عمومی ذخیره خواهد شد.
تصویر(7)
- جلوگیری از کش شدن URIها: ممکن است در وب سایت خود صفحاتی داشته باشید که به هیچ وجه نباید در حافظه کش نگهداری شوند. برای مثال اگر صفحه ای دارید که اطلاعات پویا را بر اساس ساعات روز نمایش می دهد و مرتباً تغییر می کند، می توانید مسیر آن صفحه را در این بخش وارد نمایید تا کش نشود.
تصویر(8)
- رشتههای Query را کش نکنید: رشته کوئری بخشی از URL است که پس از علامت سوال (?) می آید و حاوی پارامترها و مقادیر می باشد. برای جلوگیری از کش شدن آنها می توانید رشته های کوئری موردنظر را مشخص نمایید. به عنوان مثال، اگر صفحه ای دارید که اطلاعات مختلفی را بر اساس query string نشان می دهد، می توانید پارامترهای query string را در این بخش وارد کنید تا کش نشوند.
تصویر(9)
- تنظیمات ESI :ESI مخفف External Server Interface است و یک تکنیک قدرتمند برای بهبود عملکرد و امنیت وب سایت می باشد. ESI، صفحه خود را به بخش های جداگانه تقسیم کرده و سپس برای ایجاد کل صفحه، آنها را مونتاژ می نماید.
برای مثال، می توانید صفحه ای داشته باشید که دارای سربرگ عمومی، نوار کناری خصوصی و پاورقی عمومی باشد. با ESI، می توانید هدر و پاورقی را به صورت عمومی کش کنید و نوار کناری را به صورت خصوصی ذخیره نمایید. این قابلیت می تواند عملکرد و امنیت سایت شما را برای کاربرانی که وارد سیستم شده اند بهبود بخشد.
علاوه بر این، می توانید کدهای کوتاه را به بلوک های ESI تبدیل کنید. این بدان معنا است که می توانید خروجی کد کوتاه را جدای از مابقی صفحه، کش نمایید که باعث بهبود عملکرد سایت شما می شود زیرا کد کوتاه فقط زمانی لود خواهد شد که کاربر آن را مشاهده کند.
تصویر(10)
جمع بندی
ذخیره سازی کش یک تکنیک قدرتمند است که می تواند به طرز قابل توجهی عملکرد سایت شما را بهبود بخشد. با این حال، اگر به درستی مدیریت نشود، می تواند موجب خطر امنیتی و نقض حریم خصوصی شود. هکرها می توانند از اطلاعات حساس ذخیره شده در کش برای دسترسی غیرمجاز به حساب های کاربران، سرقت اطلاعات شخصی یا انجام حملات DDoS استفاده کنند. برای جلوگیری از کش شدن، مهم است که از ابزارها و روش های مناسب برای کنترل رفتار حافظه Cache سایت خود استفاده کنید.
- از افزونه های کش استفاده نمایید که به شما امکان می دهد اطلاعات حساس را از کش حذف کنید.
- از هدر Cache-Control برای کنترل مدت زمان ذخیره سازی اطلاعات در کش استفاده نمایید.
- از ESI برای تقسیم صفحه به بخش های جداگانه استفاده کرده و اطلاعات حساس را در مرورگر کاربر ذخیره کنید.
با پیروی از این توصیه ها، می توانید اطلاعات حساس وب سایت وردپرس خود را محافظت کنید و از یک سایت سریعتر و ایمن تر لذت ببرید.