تابع sanitize_email در وردپرس
تابع 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 یک ابزار مهم است اما تنها لایهٔ امنیتی شما نیست.
آیا این مطلب برای شما مفید بود ؟




