یه تیر و دو نشون!
سال 1404، می تونه سال تغییر بزرگ برای تو باشه، اگه دیجیتال مارکتینگ رو بلد باشی!
همین الان، دوره mydmc رو با 50 درصد تخفیف بخر و علاوه بر استفاده از mydmc به دوره جدید که آخر بهار 1404 منتشر میشه هم دسترسی کامل داشته باش.
یعنی یه دوره میخری و به 2 دوره کامل دیجیتال مارکتینگ
دسترسی داری. کد تخفیف: eid404
امنیت در کاربری سایت وردپرس
وردپرس یک پلتفرم محبوبه بنابراین طبیعیه که هدف حملات سایبری زیادی باشه و اینجاست که محافظت از دادههای کاربران و اعتبار کسبوکار شما اهمیت پیدا میکنه.
چرا امنیت وردپرس اهمیت داره؟
1- محافظت از دادههای حساس: بخشی از دادهها مربوط هست به اطلاعات شخصی کاربران و بخشی از اونها، دادههای تجاری کسبوکار ماست.
2- جلوگیری از دسترسیهای غیرمجاز: باید از دسترسی غیرمجاز به حسابهای کاربری و دادههای کاربران جلوگیری کنیم و مانع سوءاستفاده از اطلاعات شویم.
3- حفظ اعتماد کاربران: امنیت وبسایت اعتماد کاربران رو افزایش میده و بهشون اطمینان میده که اطلاعات اونها در فضای امنی قرار داره.
لایههای امنیتی وب
امنیت سرور: در اولین لایه، امنیت خود سرور مطرحه، که میتونه شامل امنیت فیزیکی و نصب سختافزارهای فیزیکی باشه و هم شامل امنیت نرمافزاری به روز بودن سیستم عامل و نرمافزارهای نصب شده روی سرور و برخورداری اونها از آخرین آپدیتهای امنیتی.
امنیت شبکه: یعنی امنیت شبکهای که سرور رو به اینترنت متصل کرده. اینجا نیاز به انجام اقداماتی مثل نصب فایروال، تشخیص نفوذ و رمزگذاری ترافیک شبکه هست.
امنیت برنامه: بحث امروز ماست. شامل پیادهسازی اقدامات امنیتی داخل وبسایت شما میشه. مثل اعتبارسنجیها، پاکسازی ورودیها، رمزگذاری دادهها، جلوگیری از حملات SQL Injection ،XSS و CSRF و مواردی از این دست.
آشنایی با تهدیدات و حملات رایج
1- تزریق SQL یا SQL Injection
شایعترین حمله امنیتی به سایتهای وردپرسی و سایر CMSهاست. در این روش مهاجم یک کد SQL مخرب رو از طریق فیلدهای ورودی به درخواست یا کوئری که به دیتابیس ارسال میشه، اضافه میکنه. این کد در نتیجهای که کد بر میگردونه، تاثیر میذاره که ممکنه به اطلاعاتی دست پیدا کنه یا عملیات مخربی رو انجام بده.
2- حمله اسکریپت بین سایتی یا XSS
در این روش مهاجم یک کد جاوا اسکریپت مخرب رو به محتوای وبسایت اضافه میکنه. این کار هم معمولاً از طریق فرمهایی مثل ارسال کامنت انجام میشه.
3- حمله جعل درخواست بین سایتی یا CSRF
در این روش کاربرانی که وارد سایت شدن، فریب داده شده و مورد سوءاستفاده قرار میگیرن تا درخواستهای مخرب را ارسال کنن.
4- حملات DDoS
یک تعداد بسیار زیادی درخواست به سرور ارسال میکنن که سرور را در ترافیک بسیار بالایی غرق میکنه. بدین ترتیب استفاده از منابع به حداکثر میرسه و میتونه بهطور موقت یا دائمی وبسایت رو از دسترس خارج کنه.
حالا میخوایم هر کدوم از این روشها رو به طور مفصل بررسی کنیم. چون برای جلوگیری از این حملات باید به طور کامل با اونها آشنا باشید.
تزریق SQL
شیوه کار در این نوع حمله بدین صورته که مهاجم کد مخرب رو به فیلدهای ورودی تزریق میکنه. این کد مخرب، کوئریهای پایگاه داده رو دستکاری میکنه و از این طریق، به اطلاعات حساس دسترسی پیدا میکنه یا عملیات غیرمجازی رو انجام میده. فرض کنید که ما یک کوئری داریم که قرار هست رکوردی رو برگردونه که نام کاربریش برابر با نام کاربری وارد شده و رمز عبورش برابر با رمز عبور وارد شده است. کافیه که به جای نامکاربری این عبارت وارد بشه:
OR '1'='1'
در نتیجه این کوئری به صورتی تغییر میکنه که تمام کاربرهای سایت رو برگردونه. البته ما چنین کوئری در وردپرس نداریم و این فقط یک مثال هست برای اینکه این نوع حمله رو درک کنید. با همین مثال متوجه میشیم که اگر چنین Quoteهایی پیش از ارسال به سمت دیتابیس پاکسازی و Validate نشن، ممکنه که مورد چه سوءاستفادههایی قرار بگیرن.
راهکارهای جلوگیری از تزریق SQL
استفاده از عبارات آماده: در وردپرس برای کار کردن با همه Objectها، توابع و متدهایی تعریف شده و شما میتونین از این متدها استفاده کنین (اضافه کردن، حذف کردن و گرفتن). حتی برای کار کردن با دیتابیس هم، کلاسی به نام WPdb وجود داره که تمام Objectها و کوئریهایی که ممکنه مورد نیازتون باشه رو به صورت ایمن در اختیارتون میذاره و از درخواستهای نامعتبر هم جلوگیری میکنه.
اعتبارسنجی و پاکسازی ورودی کاربر
بهغیر از استفاده از عبارتهای آماده و APIها، تمام فیلدها پیش از ارسال به سمت دیتابیس و انجام فعالیتی در اون باید اعتبارسنجی (Validate) بشن، همچنین باید از ذخیره و اجرای مستقیم کدهای جاوااسکریپت و HTML در دیتابیس جلوگیری کنین. از کدهای SQL خام هم نباید استفاده کرد.
محدود کردن دسترسی پایگاه داده: هرچه دسترسیها به پایگاه داده محدودتر باشه، احتمال اینکه نفوذی به پایگاه داده صورت بگیره و درخواست نابجایی ارسال بشه، کمتر میشه. باید دسترسیها فقط به کاربران مجاز محدود بشه.
حمله اسکریپت بین سایتی یا XSS
شیوه کار در این نوع حمله بدین صورته که مهاجم کد مخرب رو از طریق فیلدها به محتوای سایت تزریق میکنه، کد در مرورگر اجرا میشه و پس از اجرا میتونه به اطلاعات حساس دسترسی پیدا کنه، به سیستم کاربر آسیب برسونه، دسترسی روی سایت ایجاد کنه، فرم جعلی ایجاد کنه و... .
فرض کنید ما یک فرم کامنت روی سایت داریم که روی اون اعتبارسنجی و پاکسازی انجام نمیشه. مهاجم یک کد اسکریپت در این فرم وارد میکنه که یک پنجره اخطار مبنی بر هک شدن سایت نشون بده. درسته که سایت واقعاً هک نشده، اما کاربر عادی که متوجه این موضوع نمیشه. اگر در حال انجام فعالیتی روی سایت هست و این پنجره رو ببینه، فعالیتش رو متوقف میکنه و از سایت خارج میشه. بنابراین اعتبار و برندینگ شما ضربه زیادی میخوره. به همین ترتیب میشه با کد جاوا اسکریپت یک فرم جدید به کاربر نمایش داد که اگر تخفیف میخواین، مشخصاتتون رو در این فرم وارد کنید. اگر در اون فرم، نام کاربری و رمز عبور رو از کاربر بگیره، عملاً دسترسی به اکانت کاربر رو هم گرفته. بنابراین باید مطمئن بشین که اگر فرمی مثل فرم کامنت در سایت دارید جهت عدم دریافت کدهای جاوا اسکریپت و HTML اعتبارسنجی و پاکسازی بشه.
جلوگیری از حمله اسکریپت بین سایتی یا XSS
پاکسازی و اعتبارسنجی ورودی کاربر که باعث میشه بتونین هر کد مخربی رو قبل از اینکه به وبسایت وارد بشه، حذف کنین.
استفاده از توابع امن جاوا اسکریپت و HTML: این توابع میتونن قبل از ذخیره فرم، اطلاعات اون رو تبدیل به UTF8 کنند، به این ترتیب حتی اگر تگهای اسکریپتی هم استفاده شده باشه دیگه قابلیت اجرا ندارن و از تزریق کد مخرب جلوگیری میشه.
پیادهسازی Content Security Policy (CSP): در htaccess تنظیماتی انجام میشه که منابعی رو که میشه از طریق مرورگر لود کرد، محدود میکنه.
حمله جعل درخواست بین سایتی یا CSRF
مراحل کار در این نوع حمله بدین صورته که مهاجمان کاربران را فریب میدن تا اقدام غیر مجازی را در سایت انجام بدن و بدین ترتیب از طریق اعتبار کاربر کارهایی مثل تغییر حساب، خرید غیرمجاز یا دستکاری داده رو انجام میدن. برای مثال کاربر در سایت لاگین کرده و یک Wallet با شارژ مشخصی داره، از طریق همین فرمها، مهاجم لینکی رو میذاره و کاربر رو برای کلیک روی لینک ترغیب میکنه. کاربر هم میره و اون فرم رو پرداخت میکنه، شارژ حسابش خالی میشه. در حالی که اصلاً اون فرم، مربوط به اون کاربر نمیشده.
جلوگیری از حمله جعل درخواست بین سایتی یا CSRF
استفاده از توکنهای CSRF
باید در همه فرمها از این توکنها استفاده کنیم و وقتی هم که فرم به سمت Action میره، این توکن باید Validate بشه. از طریق این توکن مطمئن میشیم که این فرم و این کاربر متعلق به همدیگه هستند.
اعتبارسنجی ورودی سختگیرانه
خصوصاً در فرمهایی که به صورت Ajax لود میشن باید اعتبارسنجی ورودی به صورت سختگیرانه انجام بشه و منشأ درخواستها برای جلوگیری از ارسال درخواستهای مخرب منابع غیرمجاز بررسی بشه.
استفاده از کوکیهای SameSite
کوکیها رو محدود کنیم که فقط توسط همون کاربر استفاده بشن و به مهاجمان اجازه ندیم که از کوکیهایی که برای کاربر Set شده، استفاده کنن.
امنیت وردپرس
وردپرس یک سیستم مدیریت محتوا یا CMS محبوب هست که استفاده گستردهای داره. طبق آماری که در سال 2023 منتشر شد، حدود 40درصد از کل وب سایتها در اینترنت روی وردپرس هستند. تخمین زده میشه که بیش از 60 میلیون سایت وردپرسی وجود داره. حدود 70درصد وبلاگها در کل دنیا وردپرسی هستند. این محبوبیت باعث میشه که هدف حملات سایبری قرار بگیره. مثلاً اگر یک حفره امنیتی به هسته وردپرس تشخیص داده بشه، مهاجمان سایبری میدونن که بیش از 60 میلیون وب سایت قابل نفوذ هستند.
اصول اساسی امنیت وردپرس
• اصل حداقل امتیاز: هر کاربر باید حداقل دسترسیهای لازم رو به همه منابع داشته باشه.
• بهروزرسانی مداوم: بهروزرسانی باعث میشه که بتونید باگهای امنیتی رو برطرف کنین و امنیت رو بهبود بدین.
• استفاده از پروتکلها یا افزونههای امنیتی: حفاظت رو تقویت کنید.
ابزارها و منابع امنیتی برای وردپرس
همه این ابزارها امکاناتی مثل اسکن بدافزار، فایروال، نظارت بر فعالیت، مسدود کردن تلاشهای ورود غیر مجاز دارند.
• Wordfence
• Sucuri Security
• iThemes Security
نمونههای واقعی از حملات وردپرس
1- شناسایی آسیبپذیری: هکرها به دنبال نقطه ضعف در وردپرس، افزونهها یا قالبها هستند. باید نمایش نسخه وردپرس را غیر فعال کنید که مشخص نباشه دارین از چه نسخهای استفاده میکنین، چون ممکنه یک باگ امنیتی روی نسخهای که شما دارین استفاده میکنین وجود داشته باشه و شما آپدیت نکرده باشید. اگر از قالب آماده استفاده میکنید، در فایل style قالب، اسم قالب رو عوض کنید تا مشخص نباشه که از چه قالبی استفاده میکنین. هرچه اطلاعات کمتری سمت کاربر بروز بدین، آسیب پذیری کمتری خواهید داشت.
2- نفوذ به سیستم: هکرها از طریق نقاط ضعف شناسایی شده سیستم وردپرس نفوذ میکنند.
3- دسترسی به دادهها: هکرها به اطلاعات حساس مانند رمز عبور دادههای کاربر و محتوای وب سایت دسترسی پیدا میکنند. مثلاً اطلاعات حیاتی کاربران رو به دست میاره و در ازای اونها مطالبه مالی میکنه.
4- هکرها ممکنه دادهها رو تغییر بدن، حذف کنند یا از اونها سوءاستفاده کنند. مثلاً ممکنه دادههای دیتابیس رو Hash کنن و در ازای بازگرداندن اونها درخواست پول داشته باشند.
اهمیت بهروزرسانی وردپرس
1- امنیت: رفع آسیبپذیریهای امنیتی. هر زمانی که آسیبپذیری گزارش میشه، بعد از اون آپدیتی میاد و مهمه که شما اون بهروزرسانی را انجام بدین تا باگ امنیتی رفع بشه.
2- عملکرد: خیلی از مواقع بهروزرسانی باعث بهبود عملکرد وبسایت میشه.
3- برخی اوقات یک سری امکانات و ویژگیهای جدید در بهروزرسانیها به وردپرس اضافه میشه.
4- همچنین یک سری اشکالات و خطاهای غیرامنیتی هم طی بهروزرسانی رفع میشن.
بعضی از طراحان به خاطر مشکلاتی که ممکنه بهروزرسانی وردپرس برای قالب ایجاد کنه، بهروزرسانیها رو غیر فعال میکنند، که توضیح دادیم کار درستی نیست. کاری که من میکنم اینه که در طراحی قالب از فایلهای ووکامرس در تمپلیت قالب استفاده نمیکنم و تمام کارها رو با Hook جلو میبرم، بدین ترتیب قالب در آپدیت به مشکل بر نمیخوره.
امنیت نام کاربری و رمز عبور
جلوگیری از دسترسی غیرمجاز به داشبورد مدیریت
محافظت از اطلاعات حساس مانند رمز عبور دادههای کاربر و محتوای وبسایت
جلوگیری از حملات Brute Force تلاشهای متعدد برای حدس زدن رمز عبور
موارد مهم در امنیت نام کاربری و رمز عبور
• انتخاب رمز عبور قوی: بهتره که از پسوردهای Generate شده استفاده کنین و یک نرمافزار Password Keeper برای نگهداری پسوردها داشته باشین. هر چقدر رمز عبور دشوارتری داشته باشین، قابلیت حدس زدن پایینتری داره.
• عدم استفاده از رمز عبور تکراری: برای حسابهای مختلف از رمز عبورهای متفاوت استفاده کنید.
• فعالسازی احراز هویت دو مرحلهای: یک لایه امنیتی اضافی برای محافظت از حساب کاربری، مثلاً یه کد تایید هم به موبایلتون پیامک بشه.
• لینک ورود به سایت: لینک پیشفرض لاگین وردپرس wp-login.php هست، کسی که این لینک رو داشته باشه، اگر تعداد ورود رمز عبور اشتباه رو محدود نکرده باشین، این احتمال وجود داره که بتونه وارد سایت بشه. لینک ورود ادمین رو میتونید عوض کنید.
• نام کاربری: اغلب سایتهای وردپرسی نام کاربری Admin رو دارن. از طرف دیگه وقتی رمز عبور اشتباه وارد بشه پیام «رمز عبور وارد شده مربوط به این نام کاربری نیست» نمایش داده میشه. در این صورت هکر مطمئن میشه که نام کاربری که وارد کرده وجود داره و از لیست رمز عبوری که داره، پسورد دیگهای رو امتحان میکنه. بنابراین این پیام رو هم باید عوض کنین.
• نویسنده: اگر در سایت آرشیو نویسنده ندارین و براتون مهم نیست که نوشتههای مربوط به یک نویسنده به صورت مجزا نمایش داده بشن، آرشیو نویسنده رو خاموش کنید. اینطوری هکرها نمیتونن به نام کاربری رو از طریق آرشیو نویسنده، دسترسی پیدا کنند.
• رمز عبور: در وردپرس میشه از طریق ایمیل و رمز عبور هم وارد سایت شد. ایمیل هم چیزیه که از طریق مهندسی اجتماعی قابل حدس زدنه. اگر فردی در فضای مجازی فعال باشه کم پیش میاد که در سایتی که ادمینش هست، از ایمیل دیگهای استفاده کنه. بنابراین میشه ایمیلش رو پیدا کرد و پسوردش رو حدس زد. بنابراین بهتره Email Authenticate رو غیرفعال کنید.
• کپچا: در صورت وجود کپچا، دیگه نمیشه ربات روی فرم ورود اجرا کرد و دیگه درخواست Fake نمیاد. میتونید از گوگل کپچا، کپچا ورژن 3، کپچا مخفی یا سفارشی استفاده کنید.
• محدودیت تلاش: مثلاً باید محدودیت بذاریم که اگر یک IP خاص، در ده دقیقه سه بار اطلاعات ورود رو اشتباه وارد کرد، برای ده دقیقه مسدود بشه.
پوسته و افزونه
استفاده از افزونهها و پوستههای ناامن میتونه وبسایت شما در معرض خطر قرار بده.
انتخاب افزونهها و پوستههای امن
همیشه افزونهها و پوستهها را از منابع معتبری مثل مخزن وردپرس دانلود کنید. ما پیشنهاد میکنیم که افزونههای غیررایگان را حداقل از مارکتهای ایرانی ادعا میکنند با پشتیبانی در اختیارتون قرار میدن استفاده کنید، نه از افزونههای دانلودی.
بررسی نظرات کاربران
قبل از نصب نظرات کاربران و امتیاز دهی اونها رو بررسی کنید.
بررسی و تایید کد
چطور میتونیم مطمئن بشیم افزونه یا پوستهای که میخوایم نصب کنیم امنه؟
دو روش وجود داره:
• بررسی دستی کد افزونه و پوسته برای شناسایی آسیبپذیریها
• استفاده از ابزارهایی مثل Theme Check برای انجام بررسی امنیتی
مشکلاتی که افزونههای دانلودی نال شده میتونن برای شما پیش بیارند
• Backdoor: یک دسترسی غیر مجاز به سایت ایجاد میکنه
• Malware: بدافزارهایی که عملیات ناخواسته روی سایت یا سرور انجام میدن مثلاً سایت رو Deface یا ریدایرکت میکنند.
• ایجاد بکلینک و ریدایرکت
• گروگان گرفتن دیتابیس
• Deface
مدیریت افزونهها و پوستههای نصب شده
• بهروزرسانی منظم: به طور منظم افزونهها و پوستههای نصب شده رو بهروز کنین
• استفاده از افزونههای مدیریت خودکار: از افزونههای مدیریت خودکار بهروزرسانی برای بهروز نگه داشتن افزونهها و پوستهها استفاده کنین. بهتره که به نسخههای پایدار بهروز رسانی انجام بدین.
• حذف افزونهها و پوستههای بلااستفاده
• حداقلسازی تعداد افزونهها و استفاده از افزونههای چند منظوره: هرچه از تعداد افزونههای کمتری استفاده کنید میزان آسیبپذیری سایت هم پایینتر میاد.
• از افزونههایی استفاده کنید که چندین عملکرد را انجام میدن.
• کم بودن تعداد افزونهها علاوه بر کاهش آسیبپذیری در افزایش سرعت لود سایت و بهبود سئو هم موثرند.
نظارت بر فعالیت وبسایت
• افزونههای امنیتی مثل Wordfence یا Sucuri رو نصب کنید
• بهطور منظم لاگها و هشدارهای امنیتی رو بررسی کنید
تنظیم فایلهای اصلی وردپرس
Wp-confing.php: این فایل شامل اطلاعات مهمی مثل دسترسی مستقیم دیتابیس هست، همچنین میتونیم یک سری کانفیگهای امنیتی و عملکردی در اون انجام بدیم.
یکی از بخشهای مهم این فایل، Secret Keyها هست. اگر از هر طریق سایت مورد حمله قرار گرفت و به سایت دسترسی پیدا کردن، در اولین فرصت مجدداً این Secret Keyها رو Generate کنید و در این فایل جایگزین کنید. آدرس جایگزین کردنشم در اسلایدها قرار داره. هر از چند گاهی هم این کار رو انجام بدید.
از طرف دیگه ما گفتیم که باید حداقل اطلاعات رو سمت کاربر بفرستیم، بهطور پیشفرض، پیشوند تمام جداول وردپرس wp_هست، و اگر کسی به سایت دسترسی پیدا بکنه، میدونه که مثلاً از طریق جدول wp_users میتونه به اطلاعات کاربران دسترسی داشته باشه. ما میتونیم این پیشوند جداول رو عوض کنیم.
نمایش خطاهای سمت کاربر هم باید حداقل باشند، همین که بدونه کاری که میخواست انجام بشه، انجام نشده کافیه. با کد زیر ما میتونیم حالت دیباگ وردپرس رو فعال یا غیرفعال کنیم و خطاها رو ردگیری کنیم.
;define('WP_DEBUG' , false)
;define('WP_DEBUG_DISPLAY' , false)
این حالت دیباگ رو باید بعد از اتمام ردگیری خطا، حتما غیرفعال کنیم گاهی اوقات اطلاعات بسیار حیاتی در حالت دیباگ نمایش داده میشن.
;ini_set(option:'display_errors',value:'off')
;ini_set(option:'error_reporting' , value:'E_ALL')
این دو خط هم مربوط به نمایش خطاها هستند که باید خاموش باشند.
define('FORCE_SSL_ADMIN' , true)
در این خط هم، SSL برای حالت ادمین اجباری میشه و ارتباط اون با سایت امن میشه.
کار دیگهای که باید انجام بدیم اینه که اگر کاربری به هر دلیلی، در بخش ادمین نفوذ کرد، نباید قابلیت ویرایش، ویرایشگر پوسته و افزونه براش فعال باشه تا بتونه از اون طریق تغییری در سایت ایجاد کنه.
define('DISALLOW_FILE_EDIT' , true)
define('DISALLOW_FILE_MODS' , true)
به همین ترتیب دسترسی تغییرات فایل هم باید حداقل باشه، تا نصب افزونه هم ممکن نباشه. در آخر، این فایل رو از پوشه Root که وجود داره، به یک پوشه بالاتر که پوشههای پیشفرض Cpanel یا Direct Admin وجود داره منتقل کرده و دسترسی بهش رو تقریباً غیر ممکن میکنیم.
فایل htaccess: این فایل برای تنظیم قوانین دسترسی و مدیریت URLهاست. در این فایل اول بخواهیم دسترسی به فایل Wp-confing.php رو تعیین کنیم.
<Files wp-config.php>
order allow,deny
deny from all
</Files>
با این دستور دسترسی به این فایل رو مسدود کردیم. ساختار پوشههای وردپرس مشخصه. یعنی معلومه Pluginها کجاست و... .
Options -Indexes: با این دستور نمایش لیست دایرکتوریهای وردپرس غیرفعال میشه. بعد کل فایلهای حساس وردپرس هم باید دسترسی بهشون مسدود بشه.
<FilesMatch "\.(htaccess|htpasswd|ini|phps|logs|env)$">
Order Deny , Allow
Deny from all
</FilesMatch>
اگر به هر طریقی بر اثر اشتباه ما یا مشکلات افزونه و پوسته، در پوشه آپلودهای وردپرس کاربر بتواند فایل اجرایی php بارگذاری کند، مطمئن بشیم که این فایل قابلیت اجرا نخواهد داشت.
<Direcory /wp-content/uploads>
<Files *.php>
Deny from all
</Files>
</Direcory>
مورد بعدی اینه که فایل حتماً روی پروتکل HTTPS و SSL قرار بگیرد که البته باید گواهی اون رو تهیه کرده باشین. از طریق این کد، تمام ترافیک سایت به این پروتکل هدایت میشه.
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
همچنین درخواستهای مشکوکی مثل Track, Trace و Delete هم مسدود بشه.
RewriteCond %{REQUEST_METHOD} ^(DELETE|TRACE|TRACK)
اگر از سمت API هم درخواست غیرمجازی بود، ریدایرکت بشه.
RewriteRule .* - [F]
دسترسی فایل ini هم برای تغییر در تنظیمات PHP مسدود میشه.
<FilesMatch ".*\.ini$">
Order Allow,Deny
Deny from all
</FilesMatch>
باقی کدها برای ست کردن هدرهای امنیتی هست. افزایش امنیت HSTS، جلوگیری از تغییر نوع محتوا، جلوگیری از بارگذاری Iframe، مهاجم نتونه در فرم کامنت یک Iframe ایجاد کنه و دیتا از کاربر بگیره، فعال کردن فیلتر XSS، محدود کردن منابع بارگذاری شده (از جای دیگه اسکریپت لود نکنه) و کنترل اطلاعات ارجاع دهنده.
<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000;includeSubDomains" env=HTTPS
Header set X-Content-Type-Options "nosniff"
Header set X-Frame-Options "DENY"
Header set X-XSS-Protection "1; mode=block"
# Header set Content-Security-Policy "default-src 'self';"
Header set Referrer-Policy "no-referrer"
</IfModule>
گفتیم ممکنه مهاجم به پوشه plugins دسترسی پیدا کنه و از روی اسم قالب ما، حدس بزنه که فایل zip با اون نام قالب در پوشه داریم. این کد، دسترسی دانلود فایلهای zip از سایت مسدود میشه.
<FilesMatch "\.zip$">
Order Deny,Allow
Deny from all
</FilesMatch>
یک سری موارد مربوط به Function هم هست که میتونید در Function تم بگذارید.
;Add_filter('xmlrpc_enabled','__return_false')
xmlrpc از طریق این API میشه بی نهایت بار، درخواست لاگین زد که برای افزایش امنیت سایت استفاده از اون رو غیرفعال میکنیم.
یک تکه کد هم هست که چک میکنه اگر یک IP خاص، در ده دقیقه سه بار اطلاعات ورود رو اشتباه وارد کرد، برای ده دقیقه مسدود بشه. این کد میتونه جلوی Brute Force و تلاشهای متعدد برای حدس زدن رمز عبور رو بگیره.
کد بعدی Authenticate ایمیل را غیرفعال میکنه و کاربران فقط با نام کاربری قادر به لاگین در سایت خواهند بود.
;Remove_filter('authenticate','wp_authenticate_email_password',20)
این کد هم برای خاموش کردن API ها هست.
;Add_filter('json_enabled','__return_false')
;Add_filter('json_jsonp_enabled','__return_false')
مورد بعدی سفارشیسازی خطاهای فرم ورود هست که فقط اعلام کنه که اطلاعات ورود اشتباهه. تکه کد آخر هم برای غیرفعال کردن آرشیو نویسندههاست.
امنیت وردپرس با گواهینامههای SSL
SSL امنیت ارتباطات بین وبسایت و کاربران رو تضمین میکنه.
SSL اعتماد کاربران رو افزایش داده و رتبهبندی وبسایت رو بهبود میده.
پیادهسازی SSL در وردپرس
دریافت گواهینامه SSL با خریداری از یک ارائهدهنده معتبر
نصب گواهینامه SSL در هاست
تنظیم وردپرس: پیکربندی وردپرس برای استفاده از SSL یا از طریق کدی که در htaccess گفتم یا از افزونهای مثل Simple SSL استفاده کنید.
اهمیت پشتیبانگیری منظم
حفظ دادهها: پشتیبانگیری منظم از دادهها در برابر حملات سایبری و خرابی سرور محافظت میکنه.
بازگشت به گذشته: همیشه ممکنه اتفاقی بیفته که مجبور بشین به یک وضعیت قبلی برگردین، پس بهتره که یک بکاپ جدید داشته باشین تا خسارت کمتری ببینید.
جبران خطای انسانی: تغییرات اشتباه رو میتونین با استفاده از نسخههای بکاپ اصلاح کنین. مثل آپدیتهای اشتباه، آلوده شدن سایت و ...
روشهای پشتیبانگیری
پشتیبانگیری دستی: با استفاده از phpMyAdmin از پایگاه داده اکسپورت بگیرین و فایلها رو هم از FTP بردارین.
پشتیبانگیری اتوماتیک: با استفاده از افزونههایی مثل BackWPup ،UpdraftPlus
پشتیبانگیری هاستینگ: سعی کنید که حتماً از هاستینگی استفاده کنین که اگر بکاپ دو مورد قبلی با مشکل مواجه شد، یک سرویس بکاپگیری منظم بهتون ارائه بده و حداقل بکاپی تا یک هفته قبل رو داشته باشه.
بهترین شیوههای پشتیبانگیری
• پشتیبانگیری روزانه که برای وبسایتهای پویا توصیه میشه. پشتیبانگیری از دیتابیس حتماً روزانه باشه.
• ذخیرهسازی چندگانه که نسخههای پشتیبان رو در چند مکان مختلف ذخیره میکنین، مثل افزونه UpdraftPlus
• آزمایش بازیابی بهطور منظم فرایند بازیابی نسخههای پشتیبان را آزمایش میکنیم. حتماً چند وقت یکبار بکاپها رو چک کنید ببینید درست Restore میشن یا نه.
اهمیت نظارت و تحلیل امنیتی
شناسایی تهدیدات: مدام فعالیتهای روی سایت رو چک کنید.
تحلیل آسیبپذیریها: اگر ریدایرکت دیدید، فعالیت مشکوکی دیدین، تحلیل کنید و ببینید چه اتفاقاتی داره میفته.
مستندسازی: از تمام اتفاقات مشکوک اسکرینشات بگیرین و داکیومنت کنید، فایلهای آلوده شده را ذخیره کنید تا اگر نیاز به کمک گرفتن داشتین، دقیقاً متوجه بشن مشکل از کجاست. در آینده هم استراتژیهای امنیتی رو بتونید بهبود بدید.
ابزارهای نظارت و تحلیل امنیتی
• افزونههای امنیتی Wordfence و Sucuri Security که برای نظارت بر فعالیتها و تحلیل ترافیک مشکوک استفاده میشن.
• سیستمهای مدیریت لاگ Loggy و Splunk که برای جمعآوری تحلیل لاگهای سیستم بهکار میرن.
• سیستمهای مانیتورینگ شبکه Nagios و Zabbix که برای نظارت بر وضعیت سرور شبکه کاربرد دارن.
با توجه به بزرگی مجموعه و روند فعالیتها میتونید از این ابزارها استفاده کنید.
بهترین شیوههای نظارت و تحلیل
1- نظارت مداوم که بهترین حالت هست، یک نظارت 7/24 برای شناسایی فوری مشکلات امنیتی و پاسخ سریع در اولین فرصت
2- تحلیل منظم: انجام تحلیلهای دورهای آسیبپذیری برای شناسایی نقاط ضعف امنیتی
3- پاسخ سریع: تنظیم هشدارهای امنیتی برای دریافت اعلانهای فوری در صورت فعالیت مشکوک
اهمیت امنیت پایگاه داده
حفاظت از اطلاعات حساس
جلوگیری از حملات SQL Injection
حفظ یکپارچگی دادهها
روشهای امنیت پایگاه داده
• تغییر پیشوند جدول: گفتیم اگر پیشوند پیش فرض جداول را عوض کنین، هکر دسترسی هم پیدا کنه، نام دقیق جداول رو نمیدونه که روشون کوئری بزنه.
• استفاده از پسورد قوی: حتماً از پسورد Generate شده استفاده کنید.
• پیکربندی صحیح فایل wp-config.php
• محدود کردن دسترسی: در همون ابتدای درخواست، دسترسی کاربر رو چک کنید، اگر دسترسی نداره اجازه اجرای کد رو ندید.
• نظارت بر فعالیت پایگاه داده: چند وقت یکبار جداول مهم پایگاه داده رو بررسی کنید فعالیت مشکوک یا Injection در اونها اتفاق نیفتاده باشه.
• پشتیبانگیری منظم
بهترین شیوههای امنیت پایگاه داده
- به روز رسانی مرتب نرمافزار پایگاه داده و وردپرس و رفع آسیب پذیریها
- استفاده از رمزگذاری برای دادههای حساس در پایگاه داده
- نظارت مستمر بر فعالیتهای پایگاه داده برای شناسایی تهدیدات احتمالی
روشهای مقابله با حملات DDoS
از سری حملاتی است که زیاد اتفاق میافته، خصوصاً اگر رقیب جدی در کسبوکارتون داشته باشید. شیوه کار این حمله بدین صورته که با درخواستهای بسیار زیاد منابع سرور رو طوری اشغال میکنند، سایت به طور موقت یا دائم از دسترس خارج میشه.
خدمات ضد DDoS
Cloudflare: هم CDN داره، ترافیک مشکوک رو چک میکنه و حملات رو فیلتر میکنه سرعت لود سایت رو هم بالا میبره در سئو هم موثره.
Sucuri: یک سری خدمات امنیتی وب سایت شامل محافظت از حملات DDoS و مانیتورینگ امنیتی ارایه میده.
پیکربندی فایروال وب سایت
پیکربندی صحیح فایروال وبسایت نقش مهمی در مقابله با حملههای DDoS داره. فایروال سطح برنامه (مثل افزونه iThemes) میتونه درخواستهای مشکوک رو شناسایی و مسدود کنه، فایروال سختافزاری هم، ترافیک ورودی رو در سطح شبکه مدیریت میکنه. ترکیب این دو چندین لایه محافظتی از وبسایت تشکیل میدن.
راهحل مقابله با DDoS هم محدود کردن نرخ درخواستهاست. بدین ترتیب که تعداد درخواستهای مجاز از یک آدرس IP خاص در مدت زمان معین رو محدود میکنیم. افزونههای امنیتی مثل Wordfence و iThemes Security امکاناتی برای محدود کردن نرخ درخواستها دارن.