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

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

چرا نقش‌های پیش‌فرض کافی نیستند؟

نقش‌های پیش‌فرض وردپرس برای سایت‌های محتوایی طراحی شده‌اند. در سایت آموزش امنیت، شکاف‌های زیر بحرانی می‌شوند:

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

سایت آموزش امنیت، اگر خودش امن نباشد، به یک ابزار آموزشی علیه خودش تبدیل می‌شود.

برای درک پایه‌ای امنیت وردپرس، مطلب امنیت وردپرس چیست را ببینید. همچنین چگونه سایت وردپرسی را در برابر هک محافظت کنیم مرور خوبی است.

نقش‌ها در سایت آموزش امنیت

دانشجو (Security Student)

دسترسی به محیط آزمایشگاه، اجرای تست‌های ایزوله، بدون دسترسی به داده واقعی.

مدرس (Security Instructor)

مشاهده لاگ حملات شبیه‌سازی‌شده، ارائه بازخورد، بدون دسترسی به کلیدها.

دستیار (Security TA)

پایش محیط آزمایشگاه، گزارش تخلف، بدون دسترسی اجرایی.

تحلیل‌گر تهدید (Threat Analyst)

دسترسی به لاگ‌های تجمیعی و ناشناس، گزارش تهدیدها.

مدیر امنیت (Security Manager)

مدیریت کلیدها، تنظیمات امنیتی، پایش کلی.

چالش‌های امنیتی خاص

۱. محیط آزمایشگاه ایزوله

دانشجو باید بتواند در محیطی امن، حملاتی مثل SQL Injection یا XSS را شبیه‌سازی کند. این محیط باید از سایت اصلی کاملاً جدا باشد. برای مطالعه بیشتر درباره XSS، مطلب حملات XSS و پیشگیری را ببینید.

۲. خود-حمله (Insider Threat)

دانشجوی امنیت، ابزار حمله در اختیار دارد. باید رفتار او پایش شود. هرگونه تلاش برای نفوذ به سایت اصلی باید بلافاصله شناسایی و مسدود شود.

۳. مدیریت کلیدها

کلیدهای رمزنگاری و API باید در یک لایه جدا (مثلاً Vault) ذخیره شوند. هیچ نقش آموزشی نباید به این کلیدها دسترسی داشته باشد.

۴. لاگ‌های حمله

لاگ‌ها داده حساس دارند. دسترسی به آن‌ها باید محدود، رمزنگاری‌شده، و با ممیزی باشد. برای مطالعه بیشتر، مطلب بررسی لاگ حملات سایت را ببینید.

۵. احراز هویت چندلایه

حتی نقش‌های عادی باید 2FA داشته باشند. برای مطالعه بیشتر، مطلب فعال‌سازی احراز هویت دو مرحله‌ای را ببینید.

تنظیمات امنیتی هر نقش

نقش دسترسی آزمایشگاه دسترسی لاگ 2FA
دانشجو بله (ایزوله) خیر اجباری
مدرس بله محدود اجباری
دستیار بله محدود اجباری
تحلیل‌گر خیر تجمیعی اجباری
مدیر امنیت مدیریت کامل اجباری + سخت‌افزاری

پیاده‌سازی با PHP

ابتدا CPT آزمایشگاه را می‌سازیم. برای مطالعه بیشتر، مطلب پیاده‌سازی درست Custom Post Type را ببینید.

function wk_register_lab_cpt() {
    register_post_type('wk_security_lab', array(
        'label' => 'آزمایشگاه‌های امنیت',
        'public' => false,
        'show_ui' => true,
        'capability_type' => 'wk_lab',
        'capabilities' => array(
            'read_post' => 'read_wk_lab',
            'edit_post' => 'edit_wk_lab',
            'edit_posts' => 'edit_wk_labs',
            'edit_others_posts' => 'edit_others_wk_labs',
        ),
        'map_meta_cap' => true,
        'supports' => array('title', 'author', 'custom-fields'),
    ));
}
add_action('init', 'wk_register_lab_cpt');

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

function wk_register_security_roles() {
    add_role('wk_sec_student', 'دانشجوی امنیت', array(
        'read' => true,
        'edit_wk_labs' => true,
        'publish_wk_labs' => true,
        'run_wk_lab_exercise' => true,
        'upload_files' => true,
    ));

    add_role('wk_sec_instructor', 'مدرس امنیت', array(
        'read' => true,
        'edit_wk_labs' => true,
        'edit_others_wk_labs' => true,
        'read_wk_attack_logs' => true,
        'edit_wk_sec_feedback' => true,
    ));

    add_role('wk_threat_analyst', 'تحلیل‌گر تهدید', array(
        'read' => true,
        'read_wk_aggregated_logs' => true,
        'export_wk_threat_reports' => true,
    ));

    add_role('wk_sec_manager', 'مدیر امنیت', array(
        'read' => true,
        'manage_wk_security_keys' => true,
        'manage_wk_lab_config' => true,
        'read_wk_all_logs' => true,
    ));
}
add_action('init', 'wk_register_security_roles');

برای تقویت احراز هویت، مطلب تقویت احراز هویت در وردپرس را ببینید.

محیط آزمایشگاه ایزوله

محیط آزمایشگاه باید کاملاً از سایت اصلی جدا باشد. الگوی پیشنهادی:

function wk_run_lab_exercise($user_id, $lab_id, $payload) {
    if (!current_user_can('run_wk_lab_exercise')) {
        return new WP_Error('forbidden', 'دسترسی غیرمجاز');
    }
    if (!wk_user_enrolled_in_lab($user_id, $lab_id)) {
        return new WP_Error('not_enrolled', 'ثبت‌نام نشده‌اید');
    }
    $result = wk_send_to_isolated_lab($lab_id, $payload, array(
        'timeout' => 120,
        'network' => false,
        'user_id' => $user_id,
    ));
    wk_log_lab_activity($user_id, $lab_id, $payload);
    return $result;
}

نکته بحرانی: network => false باید فعال باشد. هیچ آزمایشگاه امنیتی نباید به شبکه واقعی دسترسی داشته باشد.

احراز هویت چندلایه

در سایت آموزش امنیت، 2FA برای همه نقش‌ها اجباری است. برای مدیر امنیت، باید از سخت‌افزار (Hardware Key) استفاده شود. برای مطالعه بیشتر، مطلب افزایش امنیت ورود مدیر با 2FA را ببینید.

function wk_enforce_2fa_for_roles($user) {
    $required_roles = array(
        'wk_sec_student',
        'wk_sec_instructor',
        'wk_threat_analyst',
        'wk_sec_manager',
    );
    $user_roles = (array) $user->roles;
    if (array_intersect($required_roles, $user_roles)) {
        $enabled = get_user_meta($user->ID, 'wk_2fa_enabled', true);
        if (!$enabled && !wp_doing_ajax()) {
            wp_redirect(home_url('/setup-2fa/'));
            exit;
        }
    }
}
add_action('template_redirect', 'wk_enforce_2fa_for_roles');

برای مطالعه بیشتر درباره نشست‌ها، مطلب امن‌سازی نشست‌های کاربری را ببینید.

لاگ و ممیزی

هر فعالیت در محیط آزمایشگاه باید لاگ شود. الگوی پیشنهادی:

function wk_log_lab_activity($user_id, $lab_id, $payload) {
    global $wpdb;
    $table = $wpdb->prefix . 'wk_lab_logs';
    $wpdb->insert($table, array(
        'user_id' => $user_id,
        'lab_id' => $lab_id,
        'payload_hash' => hash('sha256', $payload),
        'ip' => $_SERVER['REMOTE_ADDR'],
        'created_at' => current_time('mysql'),
    ));
}

برای مطالعه بیشتر درباره نانس و امنیت فرم، مطلب نانس وردپرس و امنیت فرم را ببینید.

برای پیشگیری از Brute Force، مطلب دفع حملات Brute Force در وردپرس را ببینید.

مرجع جهانی امنیت وب، پروژه OWASP است که چارچوب کاملی برای این حوزه ارائه می‌دهد.

پرسش‌های پرتکرار

چگونه از خود-حمله دانشجو جلوگیری کنم؟

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

آیا 2FA برای همه ضروری است؟

در سایت آموزش امنیت، بله. حتی برای نقش دانشجو، 2FA باید اجباری باشد.

چگونه کلیدهای رمزنگاری را مدیریت کنم؟

در یک Vault جدا مثل HashiCorp Vault. هیچ نقشی در وردپرس نباید مستقیم به کلید دسترسی داشته باشد.

آیا افزونه امنیتی وردپرس کافی است؟

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

چگونه ورود ادمین را امن کنم؟

مطلب امن‌سازی ورود ادمین وردپرس را ببینید.

اشتباهات رایج

اشتباه پیامد راه‌حل
آزمایشگاه روی سرور اصلی نفوذ واقعی محیط ایزوله جدا
نبود 2FA اجباری سرقت حساب Enforce 2FA برای همه نقش‌ها
کلید رمزنگاری در wp-config نشت کلید Vault جدا
لاگ بدون رمزنگاری نشت داده حمله رمزنگاری + محدودیت دسترسی
دسترسی شبکه در آزمایشگاه SSRF و نفوذ خارجی Network Isolation

نگاه مهندسی سطح‌بالا

چالش بنیادین در سایت آموزش امنیت، «پارادوکس محیط آموزش حمله» است. برای آموزش حمله، باید ابزار حمله در اختیار دانشجو باشد. اما همین ابزار می‌تواند علیه خود سایت استفاده شود. حل این پارادوکس نیازمند معماری «Zero Trust» است: هیچ درخواستی، حتی از داخل، به‌صورت پیش‌فرض معتبر نیست.

رویکرد پیشنهادی، معماری «Cell-Based Isolation» است. هر دانشجو یک Cell اختصاصی دارد که کاملاً از Cellهای دیگر جدا است. ارتباط بین Cellها فقط از طریق یک API Gateway کنترل‌شده انجام می‌شود. این معماری، مشابه معماری امنیتی بانک‌های بزرگ است.

نکته دوم، بحث «Behavioral Anomaly Detection» است. رفتار هر دانشجو باید با یک Baseline مقایسه شود. اگر رفتاری خارج از الگوی معمول (مثلاً تلاش برای اسکن پورت، یا درخواست‌های مکرر به یک Endpoint حساس) مشاهده شود، باید خودکار مسدود شود. این نیازمند یک لایه ML سبک روی لاگ‌ها است.

نکته سوم، بحث «Immutable Audit Log» است. لاگ‌ها باید در یک سیستم تغییرناپذیر (مثل Blockchain خصوصی یا Append-Only Storage) ذخیره شوند. اگر مهاجم بتواند لاگ را دستکاری کند، ممیزی بی‌معنا می‌شود.

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