سلام به سلاطین امنیت وردپرس! آقا کوچولو وارد میشود
تا حالا فکر کردید وردپرس چطوری میفهمه که وقتی روی دکمه "حذف نوشته" کلیک میکنید، واقعاً خودِ شمایید که این دستور رو دادید و نه یه ربات مخرب یا یه هکر؟ امروز میخوام درباره Nonce صحبت کنم. ابزاری که اگه نباشه، هکرها مثل آب خوردن میتونن کنترل سایتتون رو به دست بگیرن!
توی مطالب قبلی درباره انتخاب افزونههای امن صحبت کردیم، اما نانس چیزیه که توی دل کدهای وردپرس میگذره و دونستنش برای هر مدیر سایتی واجبه.
اصلاً Nonce چیست و چرا برای ما حیاتی است؟
کلمه Nonce مخفف عبارت "Number used once" هست؛ یعنی عددی که فقط یکبار استفاده میشه (البته توی وردپرس یه کم متفاوته و یه بازه زمانی ۱۲ تا ۲۴ ساعته داره).
وظیفه اصلی نانس، جلوگیری از حملهای به نام CSRF هست. توی این حمله، هکر یه لینک تقلبی میسازه و شما رو فریب میده تا روش کلیک کنید. اگه نانس نباشه، وردپرس فکر میکنه چون شما لاگین هستید، پس هر دستوری که از سمت مرورگر شما بیاد معتبره! اما نانس مثل یه "کد تایید" عمل میکنه که فقط شما و وردپرس ازش خبر دارید.
نانسها در وردپرس چطور کار میکنند؟
وردپرس برای هر کاربر و هر عملیات، یک هش (Hash) اختصاصی میسازه. این هش شامل ID شما، زمان و یک کلید مخفی (Salt) هست.
- تولید کد: وقتی یه فرم باز میشه، وردپرس یه کد مخفی توش میذاره.
- ارسال درخواست: وقتی دکمه رو میزنید، اون کد هم همراه اطلاعات ارسال میشه.
- تأیید نهایی: وردپرس چک میکنه ببینه اون کد هنوز معتبره یا نه. اگه هکری بخواد از بیرون دستور بفرسته، چون اون کد اختصاصی رو نداره، وردپرس دستش رو میخونه و اجازه عملیات نمیده!
چطور از Nonce در کدهای خودمون استفاده کنیم؟
اگه در حال توسعه یه پوسته یا افزونه هستید، وردپرس دو تا تابع عالی براتون گذاشته:
۱. استفاده در فرمها
فقط کافیه این کد رو داخل تگ <form> بذارید:
<?php wp_nonce_field( 'my_action', 'my_nonce_field' ); ?>
۲. استفاده در لینکها (URL)
اگه میخواید یه لینک حذف بسازید، باید نانس رو به تهِ آدرس اضافه کنید:
<?php $url = wp_create_nonce( 'delete_item' ); ?>
چطور نانس رو تایید کنیم؟ (مهمترین بخش!)
وقتی اطلاعات به سمت سرور میاد، نباید سریع اجراش کنید! اول باید بپرسید: "کد معرفت کو؟"
if ( ! isset( $_POST['my_nonce_field'] ) || ! wp_verify_nonce( $_POST['my_nonce_field'], 'my_action' ) ) {
wp_die( 'اوپس! شما اجازه این کار رو ندارید رفیق!' );
}
تجربه فنی آقا کوچولو: خیلیا فکر میکنن نانس برای احراز هویته، اما این اشتباهه! نانس فقط ثابت میکنه که درخواست از جای درستی اومده. پس همیشه در کنار نانس، سطح دسترسی کاربر (Permission) رو هم با تابع current_user_can() چک کنید.
بهترین ترفندها برای امنیت بیشتر
- نامهای خاص انتخاب کنید: به جای کلمات ساده مثل 'delete'، از کلمات اختصاصی مثل 'delete_siteamouz_post_12' استفاده کنید.
- انقضا رو جدی بگیرید: نانسها تا ۲۴ ساعت معتبرن. اگه کاربری صفحهاش باز بمونه و بعد از ۲ روز دکمه رو بزنه، نانس منقضی شده و باید صفحه رو ریفرش کنه. این یه باگ نیست، این امنیته!
- بکآپ فراموش نشه: طبق معمول، قبل از دست بردن توی کدهای حساس، از دیتابیس خودتون نسخه پشتیبان بگیرید.
جمعبندی: نانس بادیگارد شماست
درک نانس شاید اولش سخت به نظر بیاد، اما وقتی یادش بگیرید، امنیت سایتتون رو چند پله بالاتر میبرید. هکرها از نانس متنفرن چون تمام نقشههاشون برای حملات CSRF رو نقش بر آب میکنه!
حالا نوبت شماست: تا حالا توی فایل functions.php یا افزونههاتون از نانس استفاده کردید؟ اگه به مشکلی توی پیادهسازی خوردید، کدهاتون رو همین پایین کامنت کنید تا آقا کوچولو بهتون بگه مشکل از کجاست!