
تغییر بزرگ در امنیت وردپرس؛ بازسازی تابع wp_kses() با HTML API چه معنایی دارد؟
شاید هنگام استفاده از وردپرس هیچوقت با تابع wp_kses() برخورد نکرده باشید؛ اما این تابع یکی از بخشهای مهم هسته وردپرس است که در پشت صحنه به محافظت از محتوای سایت کمک میکند.
هر روز در یک وبسایت وردپرسی، اطلاعات مختلفی وارد میشود؛ از نوشتهها و دیدگاهها گرفته تا کدهای HTML، محتوای فرمها و اطلاعاتی که افزونهها از کاربران دریافت میکنند. همه این دادهها قابل اعتماد نیستند و بعضی از آنها ممکن است شامل ساختارهای HTML نامعتبر یا محتوای ناخواسته باشند.
اینجاست که سازوکار پاکسازی HTML اهمیت پیدا میکند.
تیم توسعه وردپرس در اکتبر ۲۰۲۶ گزارشی مهم درباره بازسازی تابع wp_kses() منتشر کرد. در این تغییر، بهجای تکیه بر روشهای قدیمی پردازش متن و الگوهای پیچیده، از HTML API برای تحلیل ساختار واقعی HTML استفاده میشود.
این تغییر فقط یک اصلاح کوچک در کدنویسی نیست؛ بلکه میتواند نحوه پاکسازی و استانداردسازی HTML را در بخشهای مختلف وردپرس تحت تأثیر قرار دهد.
در این مقاله از پاور ورد، به زبان ساده بررسی میکنیم wp_kses() چیست، HTML API چه کاربردی دارد، چه تغییراتی در روش پاکسازی محتوا ایجاد میشود و توسعهدهندگان افزونهها و قالبهای وردپرس باید به چه نکاتی توجه کنند.
تابع wp_kses() در وردپرس چیست؟
تابع wp_kses() یکی از توابع امنیتی هسته وردپرس است که برای پاکسازی HTML و محدود کردن تگها، ویژگیها و پروتکلهای مجاز استفاده میشود.
فرض کنید کاربری محتوایی شامل چند تگ HTML وارد سایت میکند. مدیر سایت میخواهد بعضی تگها مانند پاراگراف، لینک و تصویر مجاز باشند، اما سایر ساختارهای غیرمجاز از محتوای نهایی حذف شوند.
تابع wp_kses() برای چنین شرایطی کاربرد دارد.
برای مثال، توسعهدهنده میتواند مشخص کند چه تگهایی در یک محتوای مشخص مجاز هستند.
نمونه ساده:
$allowed_html = array(
'p' => array(),
'strong' => array(),
'em' => array(),
'a' => array(
'href' => true,
'title' => true,
),
);
$clean_content = wp_kses(
$content,
$allowed_html
);
در این مثال، تگهای پاراگراف، متن ضخیم، متن مورب و لینک مجاز هستند. همچنین برای تگ لینک، ویژگیهای href و title در نظر گرفته شدهاند.
هدف این است که HTML ورودی مطابق فهرست مجاز پردازش شود.
نکته مهم: wp_kses() جایگزین تمام اقدامات امنیتی نیست. برای مثال، اعتبارسنجی دادهها، بررسی سطح دسترسی کاربران و استفاده صحیح از توابع escaping همچنان اهمیت دارند.
چرا وردپرس تصمیم گرفت wp_kses() را بازسازی کند؟
سیستم قدیمی KSES سالها در وردپرس مورد استفاده قرار گرفته است؛ اما فناوری وب در این مدت تغییرات زیادی داشته است.
HTML امروزی ساختار پیچیدهتری نسبت به سالهای اولیه توسعه وردپرس دارد. تگهای تو در تو، ویژگیهای مختلف، محتوای SVG، MathML و قواعد پردازش مرورگرها باعث شدهاند تحلیل HTML به روشهای قدیمی دشوارتر شود.
در پیادهسازی قدیمی، مجموعهای از توابع پردازش رشته، عبارتهای منظم یا Regular Expressions و مراحل متعدد برای بررسی محتوا استفاده میشد.
این روش در بسیاری از شرایط کار میکرد، اما در برخی ورودیهای پیچیده ممکن بود خروجی غیرمنتظره تولید کند.
تیم توسعه وردپرس در گزارش رسمی اکتبر ۲۰۲۶ توضیح داده است که بازسازی wp_kses() با استفاده از HTML API میتواند پردازش ساختار HTML را قابلاعتمادتر و قابلپیشبینیتر کند.
این تغییر با هدف بهبود امنیت و کاهش مشکلات ناشی از تفسیر نادرست HTML انجام شده است.
HTML API چیست و چه نقشی در این تغییر دارد؟
HTML API مجموعهای از ابزارهای داخلی وردپرس برای کار با ساختار HTML است.
بهجای اینکه توسعهدهنده صرفاً متن HTML را مانند یک رشته ساده بررسی کند، میتواند از ابزارهایی استفاده کند که ساختار واقعی تگها و ویژگیهای آنها را بهتر درک میکنند.
برای مثال، فرض کنید یک محتوای HTML شامل چندین تگ تو در تو باشد. بررسی این ساختار با جستوجوی ساده رشتهها ممکن است به نتایج نادرست منجر شود.
اما یک تجزیهگر HTML میتواند ساختار سند را بر اساس قواعد HTML بررسی کند.
HTML API در این زمینه امکانات مهمی ارائه میدهد:
- شناسایی ساختار تگهای HTML
- بررسی ویژگیهای عناصر
- حرکت در ساختار سند
- پردازش محتوای تو در تو
- کمک به تولید خروجی استانداردتر
- کاهش وابستگی به روشهای قدیمی پردازش رشته
به همین دلیل، استفاده از HTML API برای بازسازی سیستم KSES یک تغییر زیرساختی مهم محسوب میشود.
مهمترین تغییرات نسخه جدید wp_kses() چیست؟
در گزارش رسمی تیم توسعه وردپرس، چند تغییر رفتاری مهم برای پیادهسازی جدید توضیح داده شده است.
۱. استانداردسازی خروجی HTML
یکی از تغییرات مهم، نرمالسازی یا Normalization ساختار HTML است.
در روش جدید، خروجی بر اساس ساختار پردازششده HTML دوباره ساخته میشود.
برای مثال، ممکن است تفاوتهایی در نحوه نمایش تگها، حروف بزرگ و کوچک، نقلقول ویژگیها و Entityهای HTML مشاهده کنید.
نمونه:
ورودی:
<IMG class=bike src='vehicle.png' />
خروجی استانداردشده:
<img class="bike" src="vehicle.png">
در اینجا ساختار خروجی منظمتر و قابلپیشبینیتر شده است.
این موضوع برای توسعهدهندگانی که خروجی wp_kses() را با رشتههای HTML دیگر مقایسه میکنند اهمیت دارد.
۲. حذف محتوای داخل تگهای SCRIPT و STYLE
یکی از تغییرات قابلتوجه به تگهای script و style مربوط میشود.
در رفتار قدیمی، اگر تگ script مجاز نبود، ممکن بود خود تگهای باز و بسته حذف شوند، اما متن داخل آن باقی بماند.
در روش جدید، وقتی این عناصر در فهرست تگهای مجاز قرار نداشته باشند، محتوای داخل آنها نیز همراه با خود عنصر حذف میشود.
برای مثال:
<p>سلام</p>
<script>example()</script>
در شرایطی که تگ Script مجاز نباشد، خروجی جدید میتواند فقط شامل پاراگراف باشد.
این تغییر باعث میشود کدهای ناخواسته بهصورت متن اضافی در خروجی باقی نمانند.
۳. مدیریت بهتر HTML ناقص
یکی از مشکلات پردازش HTML، ورودیهایی است که بهصورت ناقص ارسال شدهاند.
برای مثال، ممکن است یک تگ باز شود اما ادامه آن وجود نداشته باشد.
در چنین شرایطی، تجزیهگر جدید تلاش میکند از ادامه پردازش بخشهایی که ساختار مبهم دارند جلوگیری کند.
این رفتار میتواند مانع تولید خروجیهایی شود که هنگام قرار گرفتن در کنار سایر بخشهای HTML، ساختار سند را بههم میریزند.
۴. پردازش دقیقتر Entityهای HTML
Entityها برای نمایش کاراکترهایی استفاده میشوند که ممکن است در HTML معنای ویژه داشته باشند.
برای مثال، کاراکترهای &، < و > در برخی شرایط باید به شکل مناسب نمایش داده شوند.
پیادهسازی جدید تلاش میکند این موارد را بر اساس قواعد واقعی پردازش HTML مدیریت کند.
این موضوع بهویژه در محتوایی که شامل URL، پارامترهای جستوجو و کاراکترهای خاص است اهمیت دارد.
توسعهدهندگان باید هنگام ساخت HTML، کاراکترهای ویژه را بهدرستی Escape کنند.
۵. برخورد محتاطانهتر با SVG و MathML
SVG و MathML ساختارهای پیچیدهتری نسبت به HTML معمولی دارند.
در برخی شرایط، پردازش ناقص یا مبهم این ساختارها میتواند باعث شود بخشهای مختلف محتوا به شکل غیرمنتظره تفسیر شوند.
در پیادهسازی جدید، وردپرس تلاش میکند در شرایطی که پردازش مطمئن نیست، از ادامه تفسیر بخشهای مبهم جلوگیری کند.
این رویکرد برای کاهش خطاهای پردازشی و افزایش اطمینان از خروجی اهمیت دارد.
آیا بازسازی wp_kses() روی افزونهها و قالبهای وردپرس تأثیر میگذارد؟
این سؤال برای توسعهدهندگان اهمیت زیادی دارد.
طبق گزارش رسمی، هدف این بازسازی حفظ رابط فعلی تابع wp_kses() است؛ بنابراین در حالت معمول، افزونهها و قالبها نباید برای فراخوانی این تابع تغییر اساسی ایجاد کنند.
اما یک نکته مهم وجود دارد: رفتار داخلی تابع تغییر کرده است.
به همین دلیل، افزونههایی که به خروجی دقیق نسخه قدیمی وابسته هستند ممکن است با تفاوتهایی روبهرو شوند.
برای مثال، اگر یک افزونه خروجی wp_kses() را با یک رشته HTML از پیش تعریفشده مقایسه کند، ممکن است به دلیل نرمالسازی خروجی، نتیجه مقایسه تغییر کند.
همچنین افزونههایی که به باقی ماندن محتوای داخل بعضی تگهای غیرمجاز وابسته هستند، باید رفتار جدید را آزمایش کنند.
بنابراین توصیه میشود توسعهدهندگان قبل از ارتقای سایتهای مهم، افزونههای خود را در محیط آزمایشی بررسی کنند.
فیلتر wp_kses_force_legacy_parser چیست؟
یکی از نکات مهم این بازسازی، در نظر گرفتن راهکاری برای بازگشت موقت به رفتار قدیمی است.
وردپرس فیلتر زیر را برای این منظور معرفی کرده است:
add_filter(
'wp_kses_force_legacy_parser',
'__return_true'
);
با استفاده از این فیلتر، میتوان در شرایط پشتیبانیشده، رفتار قدیمی پردازش KSES را بهجای پیادهسازی جدید انتخاب کرد.
این راهکار برای توسعهدهندگانی مفید است که پس از آزمایش نسخه جدید متوجه ناسازگاری در کد خود میشوند.
با این حال، بهتر است این فیلتر را راهحل دائمی در نظر نگیرید.
هدف اصلی، شناسایی مشکل و اصلاح کد افزونه یا قالب است؛ نه وابستگی همیشگی به رفتار قدیمی.
همچنین این فیلتر مخصوص توسعهدهندگان است و کاربران عادی نباید بدون دلیل آن را به سایت خود اضافه کنند.
آیا نسخه جدید wp_kses() سرعت وردپرس را افزایش میدهد؟
یکی از مزایای احتمالی این بازسازی، بهبود عملکرد پردازش HTML است.
طبق توضیحات تیم توسعه، پیادهسازی جدید از ساختار HTML API استفاده میکند و بسیاری از مراحل پردازش قدیمی را کاهش میدهد.
برای مثال، در روش قدیمی چندین مرحله پردازش رشته و بررسی محتوای HTML انجام میشد.
در روش جدید، پردازش ساختار HTML به شکل منظمتری انجام میشود و در برخی شرایط نیاز به مراحل اضافی کاهش پیدا میکند.
با این حال، نباید نتیجه گرفت که این تغییر بهتنهایی باعث افزایش محسوس سرعت تمام سایتهای وردپرسی میشود.
میزان تأثیر واقعی به نوع محتوا، افزونهها، قالب و شرایط اجرای سایت بستگی دارد.
بنابراین برای نتیجهگیری دقیق باید از آزمونهای عملکردی و Benchmark استفاده کرد.
توسعهدهندگان چگونه سازگاری افزونههای خود را بررسی کنند؟
اگر توسعهدهنده افزونه یا قالب وردپرس هستید، بهتر است پیش از انتشار نسخههای جدید، کدهای مرتبط با پاکسازی HTML را آزمایش کنید.
چند مورد مهم برای بررسی عبارتاند از:
بررسی خروجی HTML
خروجی تابع wp_kses() را با نمونههای HTML مختلف مقایسه کنید.
آزمایش تگهای تو در تو
محتواهایی را بررسی کنید که شامل چندین تگ HTML درون یکدیگر هستند.
بررسی محتوای SVG و MathML
اگر افزونه شما با این ساختارها سروکار دارد، رفتار خروجی را در نسخه جدید بررسی کنید.
بررسی Entityها و URLها
مطمئن شوید کاراکترهای ویژه و پارامترهای URL به شکل مورد انتظار پردازش میشوند.
آزمایش نسخه جدید در محیط تست
بهتر است این آزمایشها روی یک نسخه آزمایشی وردپرس انجام شوند، نه مستقیماً روی سایت اصلی.
آیا کاربران عادی وردپرس باید نگران این تغییر باشند؟
اگر از وردپرس فقط برای انتشار نوشته، مدیریت برگهها یا راهاندازی فروشگاه استفاده میکنید، احتمالاً نیازی به انجام تنظیمات خاصی ندارید.
این تغییر بیشتر در سطح هسته وردپرس و برای توسعهدهندگان افزونهها و قالبها اهمیت دارد.
با این حال، اگر سایت شما از افزونههای اختصاصی یا سیستمهای سفارشی برای نمایش HTML استفاده میکند، بهتر است پس از انتشار نسخه مربوطه، عملکرد آنها را بررسی کنید.
برای مدیران سایت، بهترین اقدام استفاده از نسخه پایدار وردپرس و تهیه نسخه پشتیبان قبل از بهروزرسانی است.
زمان انتشار بازسازی wp_kses() در وردپرس
گزارش رسمی بازسازی wp_kses() در تاریخ ۷ اکتبر ۲۰۲۶ منتشر شده است.
این تغییر در چارچوب پروژه بازسازی و بهبود HTML API در هسته وردپرس انجام میشود.
بر اساس گزارش توسعهدهنده، هدفگذاری اولیه این قابلیت برای WordPress 7.2 یا WordPress 7.3 در نظر گرفته شده است؛ انتخاب نهایی به نتیجه آزمایشها و بازخورد توسعهدهندگان بستگی دارد.
بنابراین در زمان انتشار این مقاله، نباید بازسازی کامل را یک قابلیت قطعی و نهایی در وردپرس ۷.۲ معرفی کرد.
جمعبندی؛ چرا بازسازی wp_kses() یکی از تغییرات مهم فنی وردپرس است؟
تابع wp_kses() سالهاست که یکی از ابزارهای مهم وردپرس برای پاکسازی HTML محسوب میشود.
اما با پیچیدهتر شدن ساختار وب، نیاز به روشهای دقیقتر برای تحلیل و پردازش HTML نیز افزایش پیدا کرده است.
استفاده از HTML API برای بازسازی این تابع میتواند خروجی استانداردتر، پردازش قابلاعتمادتر و مدیریت بهتر ساختارهای پیچیده HTML را فراهم کند.
از حذف محتوای داخل تگهای غیرمجاز Script و Style گرفته تا نرمالسازی خروجی و مدیریت ورودیهای ناقص، این تغییرات برای توسعهدهندگان اهمیت زیادی دارند.
اگر توسعهدهنده وردپرس هستید، بهتر است سازگاری کدهای خود را با این تغییر بررسی کنید.
اگر هم مدیر یک سایت وردپرسی هستید، کافی است پس از انتشار نسخه پایدار، سازگاری افزونهها و قالبهای سایت خود را بررسی کرده و بهروزرسانی را با تهیه نسخه پشتیبان انجام دهید.
سؤالات متداول درباره wp_kses() و HTML API
تابع wp_kses() در وردپرس چه کاری انجام میدهد؟
این تابع HTML ورودی را بر اساس فهرست تگها، ویژگیها و پروتکلهای مجاز پاکسازی میکند.
HTML API در وردپرس چیست؟
مجموعهای از ابزارهای هسته وردپرس برای تحلیل، پیمایش و پردازش ساختار HTML است.
چرا wp_kses() بازسازی شده است؟
برای استفاده از روشهای استانداردتر پردازش HTML، کاهش مشکلات ناشی از روشهای قدیمی و بهبود قابلیت اطمینان پاکسازی محتوا.
آیا بازسازی wp_kses() امنیت وردپرس را افزایش میدهد؟
هدف این تغییر بهبود اطمینان و دقت فرایند پاکسازی HTML است؛ اما امنیت کامل سایت به مجموعهای از اقدامات دیگر نیز وابسته است.
فیلتر wp_kses_force_legacy_parser چیست؟
فیلتری برای انتخاب موقت رفتار قدیمی پردازش KSES در شرایط پشتیبانیشده است.
آیا این تغییر روی افزونههای وردپرس تأثیر دارد؟
بیشتر افزونهها نباید به تغییر در نحوه فراخوانی تابع نیاز داشته باشند؛ اما افزونههایی که به خروجی دقیق رفتار قدیمی وابسته هستند باید آزمایش شوند.
این قابلیت در کدام نسخه وردپرس منتشر میشود؟
طبق گزارش توسعهدهنده در اکتبر ۲۰۲۶، هدفگذاری اولیه WordPress 7.2 یا 7.3 است و انتشار نهایی به نتیجه آزمایشها بستگی دارد.