ویژگی تصویر

آموزش تابع sanitize_email() در وردپرس و کاربرد آن

  /  وردپرس   /  تابع sanitize_email در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

تابع sanitize_email() در وردپرس برای پاک‌سازی آدرس‌های ایمیل ورودی طراحی شده است. هدف این تابع حذف کاراکترهای نامعتبر و قالب‌بندی اولیهٔ رشتهٔ ایمیل است تا ورودی نا‌امن یا خراب به اجزای بعدی سیستم منتقل نشود. توجه داشته باشید که sanitize_email ایمیل را بررسی اعتبار (validate) کامل نمی‌کند؛ برای تشخیص صحت کامل آدرس باید از is_email() یا توابع مشابه استفاده کنید.

چه کاری انجام می‌دهد و چه کاری نه

  • انجام می‌دهد: حذف کاراکترهای کنترلی، فاصله‌های اضافی، و کاراکترهای غیرمجاز که ممکن است باعث مشکلات در لاجیک بعدی شوند.
  • انجام نمی‌دهد: تضمین اینکه آدرس ایمیل متعلق به یک دامنه واقعی یا یک حساب موجود است. برای این موارد باید از is_email() یا تایید ایمیل (verification) استفاده کنید.
  • توجه امنیتی: sanitize_email کمک می‌کند حملاتی مانند header injection یا ارسال دادهٔ مخرب را کاهش دهد، ولی نباید تنها خط دفاعی شما باشد.

چند مثال عملی

نمونهٔ پایه — استفاده در فرم ثبت‌نام

if ( isset($_POST['email']) ) {
    $raw_email = $_POST['email'];
    $sanitized = sanitize_email( $raw_email );

    if ( is_email( $sanitized ) ) {
        // ذخیره یا پردازش ایمیل
        $email_to_store = strtolower( $sanitized );
    } else {
        // خطای اعتبارسنجی به کاربر نمایش دهید
    }
}

این قطعه ابتدا مقدار ارسال‌شده را پاک‌سازی می‌کند، سپس با is_email() بررسی می‌کند که آیا پس از پاک‌سازی ایمیل معتبر است یا نه. توصیه می‌شود برای نگهداری در پایگاه‌داده یا مقایسه‌ها دامنه/کل رشته را به lowercase تبدیل کنید (باتوجه به اینکه معمولاً حساسیت به حروف کوچک/بزرگ در ایمیل‌ها عملی نیست).

نمونهٔ استفاده در REST API با sanitize_callback و validate_callback

add_action('rest_api_init', function() {
    register_rest_route('myplugin/v1', '/subscribe', array(
        'methods'  => 'POST',
        'callback' => 'myplugin_subscribe',
        'args'     => array(
            'email' => array(
                'required'          => true,
                'sanitize_callback' => 'sanitize_email',
                'validate_callback' => 'is_email',
            ),
        ),
    ));
});

function myplugin_subscribe( $request ) {
    $email = $request->get_param('email');
    // اگر تا اینجا ایمیل معتبر است، می‌توان ذخیره یا ارسال ایمیل تأیید انجام داد
    return rest_ensure_response( array('email' => $email) );
}

در این مثال از امکانات ثبت مسیر REST وردپرس استفاده شده: پارامتر email ابتدا توسط sanitize_email پاک‌سازی می‌شود و سپس با is_email اعتبارسنجی می‌شود. این الگو برای endpointهای عمومی اهمیت زیادی دارد تا قبل از ورود داده‌‌ها به منطق برنامه، پاک‌سازی و اعتبارسنجی انجام شود.

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

  • همیشه پس از sanitize از is_email() برای اعتبارسنجی نهایی استفاده کنید.
  • برای ذخیره در پایگاه‌داده از توابع آماده‌سازی یا API وردپرس استفاده کنید (مثلاً wp_insert_userیا update_user_meta) و برای خروجی در قالب HTML از esc_attr() یا esc_html() بهره ببرید.
  • برای مقایسه ایمیل‌ها بین رکوردها بهتر است آن‌ها را به صورت استاندارد (مثلاً lowercase) ذخیره کنید، ولی توجه داشته باشید که طبق RFC بخش local-part از آدرس به صورت نظری حساس به حروف است. در عمل اکثر سرویس‌ها حساس نیستند.
  • sanitize_email تنها یک گام از زنجیرهٔ امنیتی است؛ برای جلوگیری از SQL Injection یا XSS از ابزارهای خروجی/ورودی مخصوص استفاده کنید.

مثال: استفاده در فرم تماس با کاربر و جلوگیری از header injection

$name  = sanitize_text_field($_POST['name']);
$email = sanitize_email($_POST['email']);
$message = wp_kses_post($_POST['message']);

if ( ! is_email( $email ) ) {
    wp_die('ایمیل نامعتبر است.');
}

// ارسال ایمیل با wp_mail
$headers = array('From: ' . $name . ' ');
wp_mail( get_option('admin_email'), 'پیام از سایت', $message, $headers );

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

مقایسهٔ سریع: sanitize_email vs is_email vs PHP filter_var

تابعوظیفهچه زمانی استفاده کنیم
sanitize_email()پاک‌سازی اولیه و حذف کاراکترهای نامناسبهر زمان که ورودی ایمیل از کاربر می‌آید
is_email()اعتبارسنجی آدرس ایمیلپس از پاک‌سازی برای بررسی نهایی
filter_var(…, FILTER_VALIDATE_EMAIL)اعتبارسنجی طبق فیلترهای PHPمی‌تواند جایگزین یا مکمل is_email در سناریوهای خاص باشد

اشتباهات متداول

  • اعتماد صرف به sanitize_email بدون اعتبارسنجی نهایی: sanitize تنها قالب را اصلاح می‌کند، نه الزام به وجود یوزر یا دامنه واقعی.
  • عدم استفاده از خروجی‌های ایمن هنگام چاپ ایمیل در HTML: همواره از esc_html() یا esc_attr() استفاده کنید.
  • تبدیل بی‌دلیل به lowercase قبل از بررسی اعتبار: بهتر است بعد از اعتبارسنجی برای ذخیره یا جستجو، یک استاندارد انتخاب کنید و مستند کنید.

جمع‌بندی و توصیه‌های کاربردی

تابع sanitize_email() یکی از ابزارهای مهم برای امنیت و پاکیزگی ورودی‌ها در توسعهٔ وردپرس است. هر جا که ایمیل از کاربر یا منبع خارجی می‌آید آن را پاک‌سازی کنید، سپس با is_email() اعتبارسنجی کنید و در نهایت هنگام ذخیره و نمایش از توابع محافظت خروجی استفاده نمایید. این ترکیب ساده کمک می‌کند حملاتی مانند header injection، خطاهای قالبی و مشکلات منطقی کاهش یابد و تجربهٔ کاربری و امنیت سایت بهبود پیدا کند.

در پایان، همواره تابع را همراه با دیگر لایه‌های امنیتی و اعتبارسنجی استفاده کنید؛ sanitize_email یک ابزار مهم است اما تنها لایهٔ امنیتی شما نیست.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: