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




