آشنایی با 12 اشتباه فاحشی که حتی دولوپرهای حرفه‌ای وردپرس هم مرتکب می‌شوند!

آشنایی با 12 اشتباه فاحشی که حتی دولوپرهای حرفه‌ای وردپرس هم مرتکب می‌شوند!

وردپرس یک CMS (سیستم مدیریت محتوا) پرطرفدار است که به دولوپرها این امکان را می‌دهد تا در سریع‌ترین زمان ممکن، یک وب‌سایت را با امکانات قابل‌قبولی به دنیای اینترنت عرضه کنند. در این مقاله، به بررسی 12 اشتباه رایج در میان دولوپرهای وردپرس، حتی حرفه‌ای‌های این حوزه، می‌پردازیم که اکیداً توصیه می‌شود از بروز آنها ممانعت کرد.

۱. نوشتن تمامی کدهای جاوااسکریپت مربوط به قالب سایت در یک فایل
در بسیاری از قالب‌های وردپرس، حتی نسخه‌هایی که توسط شرکت‌های بزرگ طراحی شده‌اند، ممکن است این اشتباه وجود داشته باشد. نوشتن تمامی‌ کدهای جاوااسکریپت در یک فایل با پسوند js. با نام‌هایی مثل main.js و یا theme.js مستقیماً تأثیر منفی روی سرعت لود سایت دارد. در برخی موارد با افزایش کدها ممکن است حجم نهایی فایل‌های جاوااسکریپت به 1 مگابایت هم برسد و به این ترتیب اگر نیاز به لود تنها 10% از کدهای آن صفحه باشد، می‌بایست تمامی ‌فایل و محتویات آن خوانده شود!

این مشکل به ویژه در حالتی که توابع جاوااسکریپت در قسمت‌های بالایی صفحه فراخوانی شده باشند تأثیر منفی بیشتری بر عملکرد وب‌سایت خواهد داشت؛ علاوه بر موارد اشاره شده، نوشتن تمامی‌ کدها در یک فایل امکان ویرایش و اضافه کردن قسمت‌های جدید به آن‌ها را در آینده بسیار دشوار می‌کند. جدا کردن اسکریپت‌های هر صفحه امکان استفاده از توابعی نظیر ()wp_dequeue_script را فراهم می‌کند که در نتیجهٔ آن، کدهای مربوط به هر صفحه تنها در همان صفحه فراخوانی می‌شوند و این کار موجب افزایش سرعت لود سایت و در نتیجه بهبود تجربهٔ کاربری می‌شود.

2. استفاده از اسامی ‌نامناسب برای متغیرها، توابع و ...
در مورد نامگذاری مواردی نظیر متغیرها، کلاس‌ها، توابع و غیره، به طور کلی بهتر است از اسم‌هایی استفاده شود که در درجهٔ اول کاملاً گویا باشند و بتوان عملکرد و یا محتویات آن‌ها را از نام آن‌ها تشخیص داد، و در درجهٔ دوم احتمال وجود فایلی با نام مشابه نیز بسیار کم باشد.

استفاده از پیشوندهای مناسب می‌تواند راه‌حل خوبی برای جلوگیری از مشکلاتی از این دست باشد؛ همچنین اگر با چگونگی استفاده از namespaces‌ها در PHP آشنایی داشته باشید، استفاده از آن‌ها نیز می‌تواند در زمینهٔ نامگذاری بسیار سودمند باشد (از نسخهٔ پی‌اچ‌پی ۵.۳ به بعد فیچری به این زبان اضافه شد تحت عنوان namespace که این امکان را در اختیار دولوپرها قرار می‌دهد تا کلاس‌هایی با نام‌های مشابه در یک پروژه ایجاد کنند).

3. استفاده نکردن از امکانات پیش‌فرض و هستهٔ قدرتمند وردپرس
بسیاری از افزونه‌هایی که نصب می‌شوند امکاناتی را برای دولوپر فراهم می‌کنند که وردپرس به صورت پیش‌فرض نیز آن‌ها را ارائه ‌می‌کند! این کار نه‌ تنها موجب افزایش حجم فایل‌های وب‌سایت می‌شود، بلکه در آینده اگر برای افزونه‌های نصب شده آپدیتی ارائه نشود، دولوپر از امکانات جدیدتر محروم می‌شود.

با توجه به موارد گفته شده، توصیه می‌شود تا آنجا که امکان دارد از امکانات پیش‌فرض وردپرس استفاده شود تا نه تنها پارامترهای مهمی نظیر سرعت و امنیت در بهترین حالت ممکن باشند، بلکه امکان استفاده از آپدیت‌ها نیز فراهم گردد.

4. تغییر پلاگین‌ها و کدهای قالب
یکی از مشکلاتی که در نتیجهٔ ایجاد تغییرات در کدهای یک پلاگین و یا قالب وردپرس می‌تواند ایجاد شود، بروز مشکلات در نصب به روزرسانی‌های خودکار بعدی است. در برخی موارد نیز ممکن است به دلیل جایگزین شدن فایل‌های آپدیت با نسخهٔ پیشین، نیاز به نوشتن مجدد تمامی کدها و تمام تغییراتی باشد که پیش از این ریفکتور شده بودند.

در چنین شرایطی، شدیداً توصیه می‌شود تا تغییرات را با استفاده از ایجاد اکشن‌ها، فیلترها و نسخه‌های ثانویه اعمال کنید تا حتی اگر آپدیتی هم صورت گرفت، بدون هیچ مشکلی بتوانید به کار خود ادامه دهید.

5. در نظر گرفتن مقدار True برای متغیر WP_DEBUG
مقدار کانفیگ WP_DEBUG برای جلوگیری از نشان دادن خطاها به صورت پیش‌فرض False در نظر گرفته شده است و بدین ترتیب مواردی مثل مسیر فایل‌ها در پیام‌های خطا برای عموم نشان داده نمی‌شود؛ اما هنگام کدنویسی و ایجاد تغییرات بهتر است که این مقدار True در نظر گرفته شود تا تمامی خطاها و هشدارها برای دولوپر نشان داده شوند. مسلماً برطرف کردن این خطاها ،حتی اگر تأثیری هم در عملکرد سایت نداشته باشند، باعث می‌شود کد بهتر و تمیزتری داشته باشیم.

6. در نظر نگرفتن چگونگی اجرا شدن صفحه در حالت کش مروگر
یکی از ایراداتی که حتی گاهی‌اوقات در کدهای دولوپرهای حرفه‌ای نیز دیده می‌شود، نوشتن توابع و روابط بین آن‌ها به گونه‌ای است که اجرا شدن برخی از کدها وابسته به اجرا شدن دیگر فانکشن‌ها است. برای مثال، می‌توان یک فانکشن پی‌اچ‌پی را در نظر گرفت که مرتبط با مقدار User Agent پروتکل HTTP است؛ در چنین مواقعی، چنانچه کاربر از افزونه‌هایی مثل W3 Total Cache یا WP Rocket استفاده کند، این احتمال وجود دارد که در عملکرد صفحه اختلال ایجاد شود.

7. استفادهٔ غیراصولی از سیستم‌های ورژن کنترل
تمام تغییراتی که در افزونه‌ها و قالب‌ها انجام می‌شوند باید با دقت و به همراه جزئیات در ورژن کنترل مورد استفاده، همچون Git، ثبت شوند. برای مثال، در صورت استفاده از Git، تمامی‌ تغییرات اعمال شده نگهداری می‌شوند و به این ترتیب اعضای یک تیم می‌توانند به صورت گروهی بر روی یک پروژهٔ وردپرس کار کنند.

استفاده از گیت مزایای دیگری نیز دارد که از آن جمله می‌توان به قابلیت بازگشت به نسخهٔ پیشین در صورت بروز خطا هنگام توسعهٔ پروژه اشاره کرد. گیت به دولوپرهای تازه‌کار این امکان را می‌دهد تا با روند انجام یک پروژه به صورت گروهی بیشتر آشنا شوند و همچنین کارفرما نیز همواره می‌تواند یک گزارش مستند و دقیق از روند پیشرفت پروژه داشته باشد.

8. فراخوانی بی‌دلیل فایل‌های CSS و JS
یک صفحهٔ وب باید به گونه‌ای طراحی شود که برای اجرای آن به کمترین تعداد ریکوئست HTTP ممکن نیاز باشد که در نتیجهٔ رعایت این اصل، سرعت لود صفحه افزایش می‌یابد و شاهد کسب رتبه‌های بهتری در نتایج گوگل خواهیم بود (البته با عرضهٔ پروتکل HTTP2، این مشکل مرتفع شده است). فراخوانی بی‌دلیل فایل‌ها علاوه بر تأثیر منفی بر سرعت سایت، احتمال بروز تداخل در عملکرد آنها را نیز افزایش می‌دهد (این مورد هنگام فراخوانی لایبرری jQuery بسیار رایج است).

9. استفاده از پسوند php. به جای css. و js.
نوشتن کدهای مرتبط با رنگ‌ها و فونت‌ها در فایلی همچون style.php و ذخیرهٔ آنها در دیتابیس و سپس فراخوانی آن با استفاده از کدی مثل

<link rel='stylesheet' type='text/css' href='css/style.php?ver=1' />

می‌تواند تأثیر بسیار بدی بر عملکرد و سرعت یک سایت وردپرسی داشته باشد. علاوه بر مورد گفته شده، نوشتن کدهای CSS در کنار متغیرهای PHP موجب کاهش خوانایی کدها شده و انجام اصلاحات روی آن‌ها را نیز با مشکل مواجه می‌کند.

10. استفاده از معماری نامناسب هنگام طراحی و کدنویسی پلاگین‌ها و قالب وب‌سایت
معماری مورد استفاده باید تا حد امکان ساده و قابل‌فهم باشد. به طور مثال، WooCommerce را می‌توان نمونه‌ای موفق از یک معماری خوب در وردپرس دانست. استفاده از قابلیت‌های شی‌ٔگرایی می‌تواند راه‌حلی مناسب برای جلوگیری از پیچیده شدن کدها باشد.

علاوه بر این، تقسیم کردن کدها در چند فایل با نام‌هایی مثل class.shortcodes.php و class.scripts.php و همچنین استفاده از متدهایی نظیر ()enqueue_public_scripts و ()enqueue_admin_scripts برای فراخوانی آن‌ها، علاوه بر افزایش خوانایی کد، می‌تواند سرعت آن‌ها را نیز بهبود بخشد.

همچنین استفاده ‌از معماری MVC و جداکردن فایل‌های PHP و HTML به جای نوشتن آن‌ها در کنار یکدیگر، شیوهٔ دیگری از یک معماری مناسب برای توسعهٔ وردپرس است.

11. بی‌توجهی به مسائل امنیتی هنگام توسعهٔ وردپرس
گاهی‌اوقات توجه بیش از حد به اجرای خواسته‌های مشتری باعث می‌شود تا دولوپرها به نکات امنیتی بی‌توجه شوند! رعایت نکردن نکات امنیتی در صورتی که موضوع پروژه تولید یک افزونهٔ عمومی وردپرس باشد، عواقب بسیار بدتری نسبت به یک پروژهٔ اختصاصی به همراه خواهد داشت چراکه در چنین شرایطی ممکن است امنیت صدها کاربر وردپرس به خطر افتد.

در مباحث امنیت وردپرس، بررسی و پاکسازی سورس‌کد، به خصوص موارد مربوط به قسمت‌هایی که کاربر از طریق آن‌ها دیتا وارد می‌کند، دارای اهمیت زیادی است. یک تابع رایج برای بررسی دیتا ورودی ()sanitize_text_field است که مواردی مثل کدهای نامعتبر UTF-8، تبدیل کاراکترهایی همچون < به معادل‌های اچ‌تی‌ام‌ال آن‌ها، حذف تمامی‌ تگ‌ها و غیره را هندل می‌کند. برای کنترل داده‌های خروجی مثل نسخهٔ پرینت نیز می‌توان از ()esc_url استفاده کرد؛ این تابع کاراکترهای مخرب را حذف می‌کند و به این ترتیب موجب افزایش امنیت سایت می‌شود.

نکتهٔ دیگر، جلوگیری از دسترسی مستقیم به فایل‌ها با استفاده از URL صفحات است. تصور کنید آدرس حذف کردن یک مطلب در سایت شما به صورت زیر است:

http://example.com/wp-admin/post.php?post=123&action=trash

اگر کاربری بتواند به این آدرس دسترسی پیدا کند، این امکان وجود دارد که بتواند به جای شما مطالبی را از سایت حذف نماید. برای حل این مشکل می‌توان از یک توکن رندوم به صورت زیر استفاده کرد:

http://example.com/wp-admin/post.php?post=123&action=trash&_wpnonce=b192fc4204

در این صورت، آدرس صفحهٔ حذف مطلب مشابه با لینک بالا خواهد بود و این در حالی است که اگر کاربر دیگری بخواهد از آن استفاده کند، پاسخ 403 Forbidden برای وی نشان داده می‌شود.

در راستای افزایش امنیت یک سایت وردپرس، مواردی نظیر استفاده از تست‌های نفوذ برای پیدا کردن آسیب‌پذیری‌ها نیز می‌تواند بسیار مفید باشد. همچنین در برخی موارد نصب مجدد وردپرس باعث می‌شود تا فایل‌هایی که کدهای مخرب در آن‌ها نوشته شده است با نسخه مطمئن جایگزین شده و مشکلات امنیتی برطرف شوند.

12. استفاده از توابع و کدها بدون اطلاعات دقیق از نحوهٔ عملکرد آن‌ها
در بسیاری از موارد دولوپرها برای حل مشکلات خود در اینترنت جستجو می‌کنند و به نتایجی هم دست پیدا می‌کنند اما این در حالی است که کدهایی که یافته‌اند را بدون بررسی و آگاهی از عملکردشان بلافاصله در وردپرس کپی می‌کنند! از جمله ایراداتی که این روش حل مشکل به همراه دارد، احتمال ایجاد تفاوتی ساختاری و یا حتی تداخل کد کپی شده با سایر کدهای نوشته شده در پروژه وجود دارد.

حال نوبت به نظرات شما می‌رسد. به نظر شما با دنبال کردن چه استراتژی‌های دیگری می‌توان امنیت‌ سایت‌های وردپرسی را افزایش داد؟ نظرات، دیدگاه‌ها و تجربیات خود را با ما و سایر کاربران سکان آکادمی به اشتراک بگذارید.

منبع


علی فلاحی