ویژگی تصویر

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

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

تابع sanitize_textarea_field() برای پاک‌سازی ورودی‌های چندخطی (textarea) در وردپرس طراحی شده است. هدف اصلی این تابع حذف کاراکترهای نامعتبر، جلوگیری از حملات XSS و آماده‌سازی داده برای ذخیره‌سازی در پایگاه‌داده است، در حالی که ساختار خطوط (newlines) را به شکل مناسبی حفظ می‌کند. در ادامه با جزئیات، مثال‌ها و بهترین شیوه‌ها آشنا می‌شویم.

چرا باید از sanitize_textarea_field() استفاده کنیم؟

  • امنیت: حذف تگ‌ها و کاراکترهای مخرب که می‌تواند منجر به اجرای کد مخرب شود.
  • قابلیت اطمینان داده‌ها: استانداردسازی متن ورودی قبل از ذخیره‌سازی یا پردازش.
  • سادگی: تابعی ساده و مناسب برای اکثر ورودی‌های چندخطی که نیازی به HTML ندارند.

نحو کلی استفاده

نحو رایج این تابع به صورت زیر است:

$clean = sanitize_textarea_field( $_POST['my_textarea'] );

این خط مقدار ارسالی از فرم را پاک‌سازی کرده و در متغیر $clean قرار می‌دهد تا بتوانید آن را در پایگاه‌داده ذخیره کنید.

مثال‌های عملی

1. به عنوان callback در register_setting

register_setting(
  'my_option_group',
  'my_textarea_option',
  'sanitize_textarea_field'
);

در این مثال هنگام فراخوانی تنظیمات (settings) وردپرس، مقدار گزینه my_textarea_option توسط sanitize_textarea_field پاک می‌شود. این روش اطمینان می‌دهد هر بار که گزینه ذخیره می‌شود ورودی امن است.

2. ذخیره متای پست از فرم ارسال‌شده

if ( isset( $_POST['my_text'] ) ) {
  $value = sanitize_textarea_field( wp_unslash( $_POST['my_text'] ) );
  update_post_meta( $post_id, '_my_text', $value );
}

در این قطعه ابتدا wp_unslash برای حذف اسلش‌های اجباری استفاده می‌شود (مخصوصاً وقتی داده‌ها از فرم ارسال شده‌اند)، سپس sanitize_textarea_field داده را تمیز می‌کند و نهایتاً update_post_meta داده پاک‌شده را ذخیره می‌کند.

3. استفاده در تابع AJAX

add_action( 'wp_ajax_save_note', function() {
  check_ajax_referer( 'my_nonce', 'nonce' );
  $note = isset( $_POST['note'] ) ? sanitize_textarea_field( wp_unslash( $_POST['note'] ) ) : '';
  // ذخیره یا پردازش $note
  wp_send_json_success( array( 'note' => $note ) );
} );

در درخواست‌های AJAX نیز مشابه فرم‌ها باید داده‌ها را unslash و سپس sanitize کنید. همچنین بررسی nonce از حملات CSRF جلوگیری می‌کند.

تفاوت sanitize_textarea_field با توابع دیگر

تابعخطوط جدیداجازه HTMLموارد استفاده
sanitize_textarea_field()حفظ می‌کند (مناسب)خیر (تگ‌ها حذف یا پاکسازی می‌شوند)ورودی‌های چندخطی ساده بدون HTML
sanitize_text_field()معمولاً خطوط جدید حذف یا تبدیل می‌شوندخیرورودی‌های تک‌خطی مثل عنوان یا نام
wp_kses_post()حفظ می‌شودبله (فیلترشده مطابق تگ‌های مجاز پست)وقتی HTML محدود مجاز است

چه زمانی از sanitize_textarea_field استفاده نکنیم؟

  • اگر نیاز دارید کاربر HTML وارد کند (مثل محتواهای rich text)، از wp_kses_post یا wp_kses با آرایه تگ‌های مجاز استفاده کنید.
  • برای خروجی‌دهی در قالب، همیشه علاوه بر پاک‌سازی، از توابع escape مثل esc_textarea() استفاده کنید.

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

  • پاک‌سازی هنگام ذخیره، فرمت‌دهی هنگام نمایش: داده‌ها را هنگام ورود sanitize کنید و هنگام خروج باِEscaping مناسب نمایش دهید (مثلاً esc_textarea برای textarea).
  • wp_unslash: در فرم‌ها و AJAX، قبل از sanitize کردن معمولاً باید wp_unslash را صدا بزنید چون وردپرس به‌صورت خودکار اسلش‌ها را اضافه می‌کند.
  • اجازه HTML محدود: اگر نیاز به اجازه دادن به تگ‌های محدود دارید، از wp_kses یا wp_kses_post استفاده کنید؛ sanitize_textarea_field برای این کار مناسب نیست.
  • حجم و کارایی: sanitize_textarea_field برای متن‌های معمولی بهینه است؛ اگر متن بسیار بزرگی دارید و از نظر کارایی دغدغه دارید، می‌توانید قبل از ذخیره بررسی طول و محدودیت‌ها را انجام دهید.

نمونه کامل: فرم تنظیمات با ذخیره‌سازی امن

function my_settings_init() {
  register_setting( 'my_group', 'my_textarea_option', 'sanitize_textarea_field' );

  add_settings_section(
    'my_section',
    'تنظیمات من',
    null,
    'my_page'
  );

  add_settings_field(
    'my_textarea_option',
    'متن تکمیلی',
    function() {
      $val = get_option( 'my_textarea_option', '' );
      echo '<textarea name="my_textarea_option" rows="6" cols="50">' . esc_textarea( $val ) . '</textarea>';
    },
    'my_page',
    'my_section'
  );
}

add_action( 'admin_init', 'my_settings_init' );

در این مثال، مقدار گزینه با sanitize_textarea_field هنگام ذخیره پاک‌سازی می‌شود و هنگام نمایش در فرم از esc_textarea برای جلوگیری از injection در HTML فرم استفاده شده است. ترکیب sanitize هنگام ورود و esc هنگام خروج بهترین الگو برای امنیت است.

جمع‌بندی

sanitize_textarea_field() یک ابزار ساده و کاربردی برای پاک‌سازی ورودی‌های چندخطی در وردپرس است. این تابع اغلب برای فرم‌ها، تنظیمات و متاهای پست مناسب است، اما اگر نیاز به حفظ HTML یا اجازه تگ‌های خاص دارید باید از wp_kses یا توابع دیگر استفاده کنید. همیشه داده‌ها را هنگام ورود sanitize و هنگام نمایش escape کنید تا لایه‌های امنیتی قوی‌تری فراهم شود.

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

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