Zero Trust (اعتماد صفر) یک مدل امنیتی است که بر پایه آن هیچ درخواستی — حتی از داخل شبکه، از یک IP آشنا یا از یک کاربر وارد‌شده — به‌صورت پیش‌فرض قابل اعتماد نیست. این مدل به‌جای تکیه بر مرز شبکه، هر درخواست را به‌صورت مستقل ارزیابی می‌کند و تصمیم دسترسی را بر پایه هویت، دستگاه، بافت و سیاست می‌گیرد. برای وردپرس که محبوب‌ترین CMS (Content Management System) جهان است، Zero Trust به معنای بازطراحی لایه‌های احراز هویت، مجوزدهی، نشست و پایش است. پیاده‌سازی آن ترکیبی از MFA (Multi-Factor Authentication)، مجوزدهی ریزدانه، میکرو-سگمنتیشن و لاگ‌گیری مداوم است. مزیت اصلی Zero Trust برای وردپرس، کاهش سطح حمله در برابر حرکت جانبی مهاجم پس از یک رخنه اولیه است.

اولین باری که یک رخنه را در یک سایت وردپرسی سازمانی بررسی می‌کردم، مهاجم از یک حساب Contributor ضعیف شروع کرده بود و در کمتر از ۶ ساعت به سرور دیتابیس رسیده بود. همه اجزای سایت «امن» بودند؛ فایروال، SSL، آنتی‌ویروس. اما هیچ‌کدام از این‌ها به این پرسش پاسخ نمی‌دادند که «آیا این کاربر، در این لحظه، واقعاً مجاز به این درخواست است؟» پاسخ این پرسش، همان مرز میان امنیت سنتی و Zero Trust است.

Zero Trust دقیقاً چیست؟

Zero Trust یک محصول یا یک افزونه نیست؛ یک مدل معماری امنیتی است که در سال ۲۰۱۰ توسط John Kindervag در Forrester Research معرفی شد و بعدها در چارچوب NIST SP 800-207 به‌صورت رسمی مستندسازی شد. شعار محوری این مدل کوتاه است: «هرگز اعتماد نکن، همیشه تأیید کن» (Never Trust, Always Verify). این شعار در تقابل مستقیم با مدل سنتی Castle-and-Moat قرار می‌گیرد که در آن هر چیزی داخل مرز شبکه امن فرض می‌شد.

برای درک عمیق‌تر، مفهوم پایه‌ای این مدل در دانشنامه آزاد ویکی‌پدیا با عنوان Zero trust security model توضیح داده شده است. اما نکته کاربردی اینجاست که Zero Trust برای وب‌سایت‌های وردپرسی به سه اصل ساده تقلیل پیدا می‌کند: تفکیک هویت از شبکه، ارزیابی هر درخواست به‌صورت مستقل، و فرض رخنه در هر لحظه.

مدل Zero Trust بر چهار ستون استوار است: هویت (Identity)، دستگاه (Device)، شبکه (Network) و برنامه (Application). در بافت وردپرس، ستون هویت به کاربران و نقش‌ها، ستون دستگاه به کوکی نشست و توکن‌های API، ستون شبکه به REST API و درخواست‌های بین سروری، و ستون برنامه به افزونه‌ها و قالب‌ها اشاره دارد. بدون هماهنگی این چهار ستون، هر پیاده‌سازی جزئی، صرفاً یک لایه تزئینی است.

تفاوت بنیادین Zero Trust با امنیت سنتی در زاویه نگاه است. امنیت سنتی می‌پرسد «آیا این درخواست از داخل مرز امن می‌آید؟» اما Zero Trust می‌پرسد «آیا این درخواست، با این هویت، از این دستگاه، در این لحظه، برای این منبع، مجاز است؟». اگر با تفاوت احراز هویت و مجوزدهی آشنا نیستید، مطلب تفاوت احراز هویت و مجوزدهی چیست و چرا مرز این دو در معماری سیستم‌ها گم می‌شود؟ پیش‌نیاز این بحث است.

Zero Trust نمی‌گوید به کسی اعتماد نکن؛ می‌گوید پیش از هر تصمیم، اعتماد را از نو بساز و آن را به‌صورت مداوم بسنج.

چرا معماری Castle-and-Moat در وردپرس شکست خورده است؟

مدل Castle-and-Moat قرن‌ها الگوی غالب امنیت بود: یک دیوار محکم دور قلعه، و هر چیزی که داخل دیوار بود، دوست فرض می‌شد. در دنیای وب، این دیوار معادل فایروال شبکه و WAF (Web Application Firewall) است. اما سه تحول بنیادین، این مدل را در بافت وردپرس ناکارآمد کرده است.

تحول نخست، فروپاشی مرز شبکه است. امروز سایت‌های وردپرسی روی CDN (Content Delivery Network)، سرورهای ابری، میکروسرویس‌های جانبی و APIهای خارجی اجرا می‌شوند. مرز شبکه دیگر یک خط مشخص نیست؛ یک طیف است. تحول دوم، رشد حملات داخلی و جانبی است. بر اساس گزارش‌های سالانه Verizon DBIR و CrowdStrike، بیش از ۶۰ درصد از رخنه‌های موفق از یک حساب معتبر آغاز می‌شوند، نه از یک نقطه ورود ناشناخته. تحول سوم، پیچیدگی اکوسیستم افزونه‌های وردپرس است؛ بیش از ۶۰ هزار افزونه در مخزن رسمی وجود دارد و بخش قابل توجهی از آسیب‌پذیری‌ها از همین لایه نفوذ می‌کند.

نتیجه این سه تحول یک واقعیت تلخ است: در وردپرس، زمانی که مهاجم موفق به ورود یک حساب کاربری شود، دیگر مرزی وجود ندارد که او را متوقف کند. اگر یک Contributor بتواند با یک درخواست REST نادرست به داده‌های خصوصی دست یابد، هیچ فایروالی جلوی او را نمی‌گیرد. برای درک چرایی هدف قرار گرفتن وردپرس، مطلب چرا وردپرس هدف اصلی حملات سایبری است؟ را جداگانه بخوانید.

ویژگیCastle-and-MoatZero Trust
واحد اعتمادمرز شبکههر درخواست
پیش‌فرضداخل شبکه امن استهیچ‌چیز امن نیست
ارزیابییک‌بار در وروددر هر درخواست
واکنش به رخنهمهار در مرزفرض رخنه و ایزوله‌سازی
سازگاری با وردپرسفایروال + WAFMFA + مجوزدهی ریزدانه + لاگ

اصول هفت‌گانه Zero Trust و معادل عملی آن‌ها در وردپرس

NIST SP 800-207 هفت اصل برای Zero Trust تعریف کرده است. در ادامه هر اصل را با معادل دقیق آن در بافت وردپرس مرور می‌کنیم.

اصل یکم: همه منابع داده، نقطه تصمیم‌گیری هستند

هر منبع داده، از فایل تا دیتابیس تا REST Endpoint، باید بتواند تصمیم دسترسی بگیرد. در وردپرس، این اصل یعنی هر Endpoint سفارشی باید permission_callback داشته باشد و هر کوئری حساس باید با current_user_can بررسی شود. نبود این بررسی، پرتکرارترین شکاف امنیتی در افزونه‌های وردپرس است.

اصل دوم: همه ارتباطات بدون توجه به موقعیت شبکه، امن باشند

یعنی حتی ارتباط بین دو سرور داخلی نیز باید رمزنگاری و احراز هویت شود. در وردپرس، این اصل به اجبار HTTPS روی REST API، امضای درخواست‌های بین سرویسی و پرهیز از http://localhost بدون TLS اشاره دارد.

اصل سوم: دسترسی به هر نشست به‌صورت مستقل تصمیم گرفته شود

یعنی نشست کاربری که دیروز وارد شده، امروز به‌طور خودکار معتبر نیست. در وردپرس، این اصل نیازمند کوتاه کردن عمر نشست، ابطال پس از تغییر رمز عبور و ابطال پس از تغییر نقش است.

اصل چهارم: دسترسی با سیاست پویا تعیین شود

سیاست دسترسی باید بر پایه چند متغیر باشد: هویت، نقش، دستگاه، موقعیت جغرافیایی، زمان و بافت درخواست. در وردپرس، پیاده‌سازی این اصل نیازمند بازنویسی Capability‌ها با map_meta_cap و ترکیب آن با محدودیت‌های IP و User-Agent است.

اصل پنجم: یکپارچگی و امنیت همه دارایی‌ها به‌صورت مداوم پایش شود

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

اصل ششم: احراز هویت و مجوزدهی پیش از هر دسترسی، پویا و دقیق باشد

یعنی هرگز بر پایه یک بررسی ساده مانند is_user_logged_in تصمیم نگیرید. برای درک اهمیت این تفکیک، مطلب چرا ورود ادمین وردپرس هدف اصلی هکرهاست و چگونه امنش کنیم؟ را مطالعه کنید.

اصل هفتم: تا جای ممکن، اطلاعات بیشتری درباره وضعیت امنیتی جمع‌آوری شود

یعنی هرچه داده بیشتری از رفتار کاربر و سیستم داشته باشید، تصمیم‌گیری دقیق‌تر است. در وردپرس، این اصل به ترکیب لاگ‌های کاربری با تحلیل رفتاری و شناسایی الگوهای غیرعادی اشاره دارد.

Zero Trust در وردپرس یک پروژه یک‌ماهه نیست؛ یک مسیر تدریجی است که از احراز هویت شروع می‌شود و به پایش رفتاری می‌رسد.

لایه هویت و احراز هویت در معماری Zero Trust

در Zero Trust، هویت نه یک نام کاربری، بلکه یک دارایی قابل تأیید است. این لایه سه جزء کلیدی دارد: احراز هویت اولیه، احراز هویت مداوم و مدیریت چرخه عمر هویت.

احراز هویت اولیه و اجبار MFA

در مدل Zero Trust، رمز عبور به‌تنهایی هرگز کافی نیست. حتی اگر یک رمز عبور بسیار قوی داشته باشید، به‌محض لو رفتن آن — از طریق فیشینگ یا نشت دیتابیس — همه مرزها فرو می‌ریزند. MFA این نقطه شکست را می‌بندد. مطالعات Microsoft نشان می‌دهد فعال‌سازی MFA تا ۹۹.۹ درصد از حملات خودکار را دفع می‌کند. برای پیاده‌سازی اصولی این لایه، مطلب MFA چیست و چرا به یک ضرورت امنیتی غیرقابل چشم‌پوشی تبدیل شده است؟ را بخوانید.

انتخاب روش MFA یک تصمیم معماری است. TOTP (Time-based One-Time Password) ساده‌ترین گزینه است و در برابر فیشینگ ساده مقاوم است، اما در برابر فیشینگ پیشرفته (Adversary-in-the-Middle) آسیب‌پذیر است. WebAuthn (FIDO2) قوی‌ترین گزینه است و در برابر فیشینگ مقاوم است؛ زیرا اعتبارسنجی به دامنه گره خورده و در دامنه جعلی کار نمی‌کند. پیامک، ضعیف‌ترین گزینه است و به دلیل SIM Swap توصیه نمی‌شود.

احراز هویت مداوم (Continuous Authentication)

یکی از بنیادین‌ترین تفاوت‌های Zero Trust با امنیت سنتی، احراز هویت مداوم است. در مدل سنتی، پس از ورود موفق، نشست تا انقضا معتبر است. در Zero Trust، نشست در هر درخواست باز ارزیابی می‌شود. معیارهای ارزیابی شامل تغییر IP، تغییر User-Agent، تغییر موقعیت جغرافیایی سریع (Impossible Travel)، فعالیت در ساعات غیرعادی و نرخ درخواست غیرمعمول است.

add_action( 'init', function() {
    if ( ! is_user_logged_in() ) {
        return;
    }

    $user_id = get_current_user_id();
    $current_ip = $_SERVER['REMOTE_ADDR'] ?? '';
    $stored_ip  = get_user_meta( $user_id, 'wk_last_ip', true );

    if ( $stored_ip && $stored_ip !== $current_ip ) {
        $ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
        update_user_meta( $user_id, 'wk_last_ua', $ua );

        if ( user_can( $user_id, 'manage_options' ) ) {
            WP_Session_Tokens::get_instance( $user_id )->destroy_all();
            wp_logout();
        }
    }

    update_user_meta( $user_id, 'wk_last_ip', $current_ip );
} );

این کد نمونه، برای حساب‌های مدیریتی، هنگام تغییر IP نشست را ابطال می‌کند. در پروژه‌های واقعی، می‌توان این را به یک سیستم امتیازدهی نرم‌تر تبدیل کرد: به‌جای ابطال فوری، سطح دسترسی در جلسه کاهش یابد و از کاربر MFA دوباره خواسته شود.

چرخه عمر هویت و مدیریت حساب‌های بازنشسته

در معماری Zero Trust، هویت یک موجود زنده است که متولد می‌شود، تغییر می‌کند و می‌میرد. حساب‌های غیرفعال، حساب‌های مشترک و حساب‌های سرویس بدون مستندسازی، بزرگ‌ترین تهدید داخلی هستند. حداقل هر سه ماه باید یک بازبینی دسترسی انجام شود و هر حساب که بیش از ۹۰ روز وارد نشده، تعلیق یا حذف شود.

مجوزدهی ریزدانه و تصمیم‌گیری پویا

در Zero Trust، مجوزدهی نه در سطح نقش، بلکه در سطح منبع انجام می‌شود. این تفاوت کلیدی، مرز میان یک سایت معمولی و یک سایت مبتنی بر Zero Trust است.

از Role-Based به Attribute-Based Access Control

مدل سنتی وردپرس بر RBAC (Role-Based Access Control) استوار است. اما مدل Zero Trust به سمت ABAC (Attribute-Based Access Control) حرکت می‌کند. در ABAC، تصمیم دسترسی بر پایه مجموعه‌ای از ویژگی‌ها است: نقش کاربر، مالکیت منبع، وضعیت حساب، زمان، موقعیت و ریسک نشست.

add_filter( 'map_meta_cap', function( $caps, $cap, $user_id, $args ) {
    if ( 'edit_post' !== $cap || empty( $args[0] ) ) {
        return $caps;
    }

    $post_id  = (int) $args[0];
    $post     = get_post( $post_id );
    $author   = (int) $post->post_author;
    $user     = get_userdata( $user_id );
    $is_admin = in_array( 'administrator', (array) $user->roles, true );
    $risk_ok  = (int) get_user_meta( $user_id, 'wk_risk_score', true ) < 7;

    if ( ! $is_admin && ( $author !== $user_id || ! $risk_ok ) ) {
        $caps[] = 'do_not_allow';
    }

    return $caps;
}, 10, 4 );

در این الگو، امتیاز ریسک کاربر نیز وارد تصمیم دسترسی شده است. اگر امتیاز ریسک بالا باشد — مثلاً به دلیل رفتار غیرعادی اخیر — کاربر حتی اگر مالک نوشته باشد، مجاز به ویرایش نیست. این همان تفاوت بنیادین Zero Trust با RBAC است.

مجوزدهی مبتنی بر بافت در REST API

هر Endpoint سفارشی در REST API باید یک permission_callback داشته باشد که نه‌فقط نقش، بلکه بافت درخواست را بررسی کند.

register_rest_route( 'wk/v1', '/orders/(?P\d+)', [
    'methods'  => 'GET',
    'callback' => 'wk_get_order',
    'permission_callback' => function( $request ) {
        $order_id = (int) $request['id'];
        $user_id  = get_current_user_id();

        if ( ! $user_id ) {
            return new WP_Error( 'unauthorized', 'ورود لازم است', [ 'status' => 401 ] );
        }

        if ( ! current_user_can( 'read_order', $order_id ) ) {
            return new WP_Error( 'forbidden', 'دسترسی مجاز نیست', [ 'status' => 403 ] );
        }

        return true;
    },
] );

نکته ظریف اینجاست که permission_callback باید پیش از اجرای callback اصلی فراخوانی شود و اگر مقدار true برنگرداند، callback اجرا نمی‌شود. فراموش کردن این callback، یکی از پرتکرارترین آسیب‌پذیری‌های افزونه‌های وردپرسی در سال‌های اخیر بوده است.

میکرو-سگمنتیشن در بافت وردپرس

میکرو-سگمنتیشن (Micro-segmentation) در Zero Trust یعنی هر بخش از سیستم، مرز امنیتی مستقل خود را داشته باشد. در وردپرس، این مفهوم به سه سطح قابل پیاده‌سازی است.

سطح اول: جداسازی دیتابیس

کاربر دیتابیس وردپرس نباید دسترسی DROP، ALTER یا GRANT داشته باشد. تنها مجوزهای لازم برای کارکرد سایت باید اعطا شوند: SELECT، INSERT، UPDATE و DELETE روی جداول سایت. برای پیاده‌سازی این سطح، مطلب چگونه دیتابیس وردپرس را امن کنیم؟ راهنمای جامعی ارائه می‌دهد.

سطح دوم: جداسازی سرورهای جانبی

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

سطح سوم: جداسازی افزونه‌ها

افزونه‌های وردپرس در یک فضای مشترک PHP اجرا می‌شوند. جداسازی واقعی در این لایه دشوار است، اما می‌توان با ترکیب وایت‌لیست افزونه‌ها، غیرفعال‌سازی بارگذاری فایل‌های آلوده و بازبینی منظم مخزن، سطح حمله را کاهش داد. برای شناخت تهدیدهای رایج این لایه، مطلب حملات سایبری رایج علیه وردپرس کدامند؟ را جداگانه بررسی کنید.

نظارت مداوم و تحلیل رفتار کاربر

در Zero Trust، پایش (Monitoring) نه یک عمل پس از حادثه، بلکه یک ورودی زنده برای تصمیم‌گیری است. سه نوع پایش در بافت وردپرس حیاتی‌اند.

پایش ورود و تلاش‌های ناموفق

الگوی تلاش‌های ناموفق ورود، اولین نشانه حمله Brute Force (Brute Force Attack) است. ثبت IP، User-Agent و فاصله زمانی تلاش‌ها، امکان شناسایی خودکار مهاجم را فراهم می‌کند. برای آشنایی با تکنیک‌های دفاعی این حوزه، مطلب چگونه حملات brute force را در وردپرس دفع کنیم؟ را توصیه می‌کنم.

پایش تغییرات پیکربندی

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

پایش رفتار کاربر و شناسایی ناهنجاری

تحلیل رفتار کاربر (User Behavior Analytics) در Zero Trust نقش کلیدی دارد. معیارهای معمول شامل نرخ درخواست REST API، تعداد ویرایش‌های ناموفق، تلاش برای دسترسی به منابع خارج از نقش و دانلود غیرعادی داده است. ترکیب این معیارها با امتیاز ریسک، تصمیم دسترسی را پویا می‌کند.

add_action( 'rest_api_init', function() {
    add_filter( 'rest_pre_dispatch', function( $result, $server, $request ) {
        $user_id = get_current_user_id();
        if ( ! $user_id ) {
            return $result;
        }

        $minute_key = 'wk_api_rate_' . $user_id . '_' . gmdate( 'YmdHi' );
        $count = (int) get_transient( $minute_key );

        if ( $count > 120 ) {
            update_user_meta( $user_id, 'wk_risk_score', 8 );
            return new WP_Error( 'rate_limit', 'نرخ درخواست غیرمجاز', [ 'status' => 429 ] );
        }

        set_transient( $minute_key, $count + 1, MINUTE_IN_SECONDS );
        return $result;
    }, 10, 3 );
} );

این کد نمونه، نرخ درخواست‌های کاربر را محدود و در صورت تجاوز، امتیاز ریسک او را بالا می‌برد. امتیاز ریسک، در تصمیم‌های دسترسی بعدی وارد می‌شود. این همان حلقه بسته‌ای است که Zero Trust را از امنیت ایستا متمایز می‌کند.

پیاده‌سازی عملی Zero Trust در وردپرس

گذار از امنیت سنتی به Zero Trust یک شبه انجام نمی‌شود. در پروژه‌های واقعی، مسیر زیر کم‌ریسک‌ترین و کارآمدترین مسیر بوده است.

گام اول: نقشه‌برداری از دارایی‌ها و جریان داده

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

گام دوم: تقویت لایه هویت

فعال‌سازی MFA برای همه نقش‌های دارای دسترسی مدیریتی، کوتاه کردن عمر نشست، ابطال نشست پس از تغییر رمز عبور و حذف حساب‌های سرویس با دسترسی بیش از حد، اولین گام عملی است.

add_filter( 'auth_cookie_expiration', function( $length, $user_id, $remember ) {
    if ( user_can( $user_id, 'manage_options' ) ) {
        return 2 * HOUR_IN_SECONDS;
    }
    if ( user_can( $user_id, 'edit_posts' ) ) {
        return 6 * HOUR_IN_SECONDS;
    }
    return 12 * HOUR_IN_SECONDS;
}, 10, 3 );

گام سوم: بازبینی و کوچک‌سازی نقش‌ها

هر نقش باید بازبینی شود و Capability‌های غیرضروری حذف شوند. نقش Editor به‌صورت پیش‌فرض می‌تواند کاربران پایین‌دست را مدیریت کند؛ این اختیار در بسیاری از پروژه‌ها لازم نیست و باید حذف شود.

add_action( 'init', function() {
    $editor = get_role( 'editor' );
    if ( $editor ) {
        $editor->remove_cap( 'delete_users' );
        $editor->remove_cap( 'create_users' );
        $editor->remove_cap( 'promote_users' );
        $editor->remove_cap( 'edit_users' );
    }
} );

گام چهارم: پیاده‌سازی لاگ ساختاریافته

هر رویداد امنیتی کلیدی باید در یک لاگ قابل تحلیل ثبت شود. بهترین الگو، ثبت به‌صورت JSON و انتقال به یک سیستم متمرکز است.

function wk_log_security_event( $event, $data = [] ) {
    $entry = wp_json_encode( [
        'ts'     => current_time( 'mysql', true ),
        'event'  => $event,
        'user'   => get_current_user_id(),
        'ip'     => $_SERVER['REMOTE_ADDR'] ?? '',
        'data'   => $data,
    ] );

    error_log( '[WK-SEC] ' . $entry );
}

add_action( 'wp_login_failed', function( $username ) {
    wk_log_security_event( 'login_failed', [ 'username' => $username ] );
} );

add_action( 'set_user_role', function( $user_id, $new_role, $old_roles ) {
    wk_log_security_event( 'role_change', [
        'user' => $user_id,
        'from' => $old_roles,
        'to'   => $new_role,
    ] );
}, 10, 3 );

گام پنجم: آزمون و بازبینی دوره‌ای

پس از پیاده‌سازی، باید سیاست‌ها با سناریوهای واقعی آزموده شوند. آیا یک کاربر با نقش Author می‌تواند از طریق REST API به داده کاربران دسترسی پیدا کند؟ آیا یک نشست منقضی‌شده، همچنان معتبر است؟ پاسخ به این پرسش‌ها، کیفیت پیاده‌سازی را می‌سنجد. برای یک چارچوب عملی، مطلب تست امنیت وب‌سایت چگونه انجام می‌شود و از کجا باید شروع کرد؟ راهنمای خوبی است.

ابزارها و افزونه‌های مناسب

پیاده‌سازی کامل Zero Trust بدون ابزار مناسب، زمان‌بر و پرهزینه است. در پروژه‌های واقعی، ترکیب زیر نتیجه بهتری داده است.

لایهگزینه‌های مناسبنقش در معماری Zero Trust
MFAافزونه‌های TOTP یا WebAuthnتقویت لایه هویت
SSOSAML یا OpenID Connectهویت متمرکز سازمانی
Auditافزونه‌های Activity Logثبت رویدادهای امنیتی
Rate Limitکد سفارشی یا WAFمحدودسازی نرخ درخواست
ScannersWPScan، Sucuriارزیابی دوره‌ای

نکته مهم این است که هیچ ابزاری به‌تنهایی Zero Trust نمی‌سازد. Zero Trust یک مدل است و ابزارها فقط لایه‌های اجرای آن را ساده می‌کنند. برای آشنایی با اصول کلی امنیت وب پیش از انتخاب ابزار، مطلب امنیت وب چیست و چه اصولی دارد؟ را پیشنهاد می‌کنم.

اشتباهات رایج در پیاده‌سازی Zero Trust

در بررسی پروژه‌های متعدد، الگوهای تکرارشونده زیر پرتکرارترین خطاها در پیاده‌سازی Zero Trust در وردپرس بوده‌اند. این خطاها نه از ضعف دانش، بلکه از عادت‌های نادرست ناشی می‌شوند.

  • محدود کردن Zero Trust به MFA، بدون بازبینی نقش‌ها و سیاست‌های دسترسی.
  • اعتماد به IP داخلی به‌عنوان معیار کافی برای مجوزدهی.
  • نداشتن permission_callback در REST APIهای سفارشی.
  • استفاده از نشست‌های طولانی برای حساب‌های مدیریتی.
  • فعال‌سازی Application Password بدون انقضا و بدون محدودیت IP.
  • نادیده گرفتن لاگ‌گیری به بهانه «کارایی سایت».
  • اجرای Zero Trust فقط در لایه وردپرس، بدون توجه به سرور و شبکه.
  • نداشتن برنامه بازبینی دوره‌ای و ابطال دسترسی‌های قدیمی.

هر یک از این موارد به‌تنهایی کافی است تا کل معماری Zero Trust بی‌اثر شود. اگر به دنبال تکمیل این لایه با اصول پایه محافظت از سایت هستید، مطلب چگونه سایت وردپرسی را در برابر هک محافظت کنیم؟ راهنمای گام‌به‌گام خوبی است.

پرسش‌های پرتکرار درباره Zero Trust در وردپرس

در ادامه به پرسش‌هایی پاسخ می‌دهیم که بیشترین جستجو و بازخورد کاربران در ارتباط با Zero Trust در بافت وردپرس داشته‌اند.

آیا Zero Trust برای سایت‌های کوچک وردپرسی هم لازم است؟

بله، اما با شدت کمتر. اصول پایه Zero Trust — مثل MFA، حداقل دسترسی، عمر کوتاه نشست و لاگ‌گیری — در هر اندازه‌ای از سایت مفید است. اجرای کامل چارچوب NIST برای یک سایت شخصی، بیش از حد پیچیده و پرهزینه است؛ اما نسخه سبک آن، سطح امنیت را به‌طور چشمگیری بالا می‌برد.

تفاوت Zero Trust با فایروال اپلیکیشنی (WAF) چیست؟

WAF یک ابزار است؛ Zero Trust یک مدل. WAF در مرز شبکه تصمیم می‌گیرد، اما Zero Trust در هر درخواست و بر پایه هویت و بافت تصمیم می‌گیرد. WAF می‌تواند بخشی از یک معماری Zero Trust باشد، اما جایگزین آن نمی‌شود.

آیا می‌توان Zero Trust را بدون تغییر هسته وردپرس پیاده کرد؟

بخش بزرگی از آن را بله. با استفاده از هوک‌ها، فیلترها، بازنویسی map_meta_cap و افزونه‌های مناسب، می‌توان لایه‌های اصلی Zero Trust را بدون دست‌زدن به هسته پیاده کرد. اصل عدم ویرایش هسته، یکی از پایه‌های امنیت پایدار در وردپرس است.

آیا Zero Trust سرعت سایت را کاهش می‌دهد؟

اگر نادرست پیاده شود، بله. هر بررسی اضافه در هر درخواست هزینه دارد. اما با کش کردن نتایج تصمیم دسترسی، استفاده از Transient برای ذخیره امتیاز ریسک و بهینه‌سازی کوئری‌ها، می‌توان هزینه عملکردی را نزدیک به صفر نگه داشت. کاهش سرعت قابل قبول، معمولاً در ازای افزایش امنیت، معامله درستی است.

Zero Trust چه تفاوتی با Least Privilege دارد؟

Least Privilege یکی از اصول Zero Trust است، نه معادل آن. Least Privilege درباره سطح دسترسی صحبت می‌کند، در حالی که Zero Trust علاوه بر آن، احراز هویت مداوم، میکرو-سگمنتیشن و پایش رفتاری را نیز شامل می‌شود.

آیا Zero Trust به‌معنای حذف VPN است؟

در معماری Zero Trust مدرن، VPN یک لایه اضافی محسوب می‌شود و نه یک نیاز بنیادین. در واقع، Zero Trust می‌گوید حتی اگر از VPN استفاده می‌کنید، همچنان باید هر درخواست را مستقل ارزیابی کنید. VPN جایگزین Zero Trust نیست؛ مکمل یا در برخی موارد، ضد آن است.

چطور بفهمم پیاده‌سازی Zero Trust در سایتم مؤثر بوده است؟

سه شاخص کلیدی: نخست، کاهش ورودهای ناموفق موفق (یعنی نسبت ورودهای ناموفق که به ورود موفق منتهی می‌شوند)، دوم، کاهش زمان میان شناسایی رخنه و مهار آن، سوم، افزایش پوشش لاگ‌گیری رویدادهای حساس. اگر این سه شاخص به‌مرور بهبود یافته‌اند، پیاده‌سازی در مسیر درستی است.

نگاهی در سطح معماری سازمانی

در سطح مهندسی ارشد، پیاده‌سازی Zero Trust در وردپرس سه محدودیت ساختاری دارد که باید صادقانه پذیرفته شوند. محدودیت اول، نبود یک موتور سیاست (Policy Engine) مستقل در هسته وردپرس است. تصمیم دسترسی در وردپرس، درون کد PHP و به‌صورت تابعی گرفته می‌شود، نه از یک سرویس سیاست‌گذاری جداگانه. شبیه‌سازی این لایه نیازمند طراحی سفارشی است؛ الگویی مانند Policy Decision Point (PDP) جدا و Policy Enforcement Point (PEP) درون وردپرس، قابل پیاده‌سازی است اما پیچیدگی بالایی دارد.

محدودیت دوم، وابستگی Zero Trust در وردپرس به یکپارچگی هسته و افزونه‌ها است. اگر یک افزونه با current_user_can نادرست کار کند، یا اگر یک قالب دسترسی REST API را نادرست پیاده‌سازی کند، کل لایه سیاست دور زده می‌شود. در پروژه‌های سازمانی، باید یک مرحله بازبینی امنیتی کد (Code Review) پیش از نصب هر افزونه انجام شود. برای آشنایی با این فرآیند، مطلب حمله MITM (Man-in-the-Middle) چیست و چه خطراتی دارد؟ را جداگانه بررسی کنید.

محدودیت سوم، ماهیت Stateless وردپرس در لایه احراز هویت است. برخلاف سرویس‌های سازمانی که از SAML یا OIDC با IdP مستقل استفاده می‌کنند، وردپرس بر کوکی نشست متکی است. برای رفع این محدودیت، باید هویت به یک Identity Provider خارجی منتقل شود و وردپرس فقط نقش Service Provider را ایفا کند. این الگو، در پروژه‌های سازمانی بزرگ که با Azure AD یا Okta کار می‌کنند، استاندارد شده است.

در سطح پیاده‌سازی پیشرفته، توصیه می‌شود Zero Trust را به‌عنوان یک لایه مستقل از کد برنامه طراحی کنید که سه جزء دارد: یک سرویس ارزیابی ریسک (Risk Scoring Service)، یک سرویس تصمیم سیاست (Policy Decision Service) و یک خط لوله لاگ (Audit Pipeline). این تفکیک، آزمون‌پذیری را بالا می‌برد و امکان جایگزینی هر جزء را بدون بازنویسی کل سیستم فراهم می‌کند. برای بررسی دقیق‌تر این نوع معماری در بافت سرور، مطلب چگونه امنیت سرور را افزایش دهیم؟ را مطالعه کنید.

در Zero Trust، اعتماد یک تصمیم لحظه‌ای است؛ نه یک وضعیت دائمی که با ورود یک‌باره به دست می‌آید.

بستن این مسیر

Zero Trust برای وردپرس، پاسخ طبیعی به واقعیتی است که امروز همه با آن روبه‌رو هستیم: مرز شبکه دیگر وجود ندارد و هر درخواست باید از صفر ارزیابی شود. پیاده‌سازی آن نه یک پروژه یک‌ماهه، بلکه یک مسیر تدریجی است که از MFA شروع می‌شود، با بازبینی نقش‌ها و کوچک‌سازی دسترسی‌ها ادامه می‌یابد و با لاگ‌گیری ساختاریافته و پایش مداوم به بلوغ می‌رسد. اگر امروز تنها یک قدم بردارید، بگذارید آن قدم فعال‌سازی MFA روی همه حساب‌های مدیریتی باشد و بازبینی نقش‌های پیش‌فرض. همین دو گام، بخش بزرگی از سطح حمله را کاهش می‌دهد. 🛡️

اگر Zero Trust را در یک پروژه وردپرسی واقعی پیاده کرده‌اید، برای من جالب است بدانم کدام لایه بیشترین چالش را ایجاد کرد: تقویت MFA، بازنویسی map_meta_cap، یا طراحی خط لوله لاگ. تجربه خودتان را در دیدگاه‌ها بنویسید؛ به‌خصوص اگر راهکار جایگزینی پیدا کرده‌اید که می‌تواند برای خواننده بعدی مفید باشد.