🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۶ Ebrahim Shahi
nonce check
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۱۹ شهریور ۱۴۰۲

این شرط برای چک کردن نانس درست هست؟

if(isset($_POST['_nonce']) && !wp_verify_nonce($_POST['_nonce'])){
        die('Access Denied!!!');
    }

یا

if(!isset($_POST['_nonce']) || !wp_verify_nonce($_POST['_nonce'])){
        die('Access Denied!!!');
    }

و به طور کلی شرط اول روش درست و مناسبی هست؟

با سلام و احترام

بسته به اینکه شما از nonce در چه بخشی استفاده کرده اید میتواند متفاوت باشد. ممکن است از این قابلیت در url - form - admin و .. استفاده شده باشد

ولی من چند مورد از موارد را براتون مثال میزنم:

check_admin_referer()

برای چک کردن اینکه درخواست از سمت مدیر وردپرسی داره ارسال میشه برای اکشن‌های سمت ادمین مناسبه.

check_ajax_referer()

چک کردن nonce که از سمت فرم ایجکس میاد - با روش‌های دیگه هم ممکنه.

wp_verify_nonce()

برای باقی موارد استفاده میشه

در نظر داشته باشید بهتر که برای هر بخش یک کلید در نظر بگیرید و صرفا _nonce استفاده نکنید.

بهنام مرادی ۲۰ شهریور ۱۴۰۲، ۰۸:۳۴

ابوالفضل محجوب ۲۰ شهریور ۱۴۰۲، ۰۸:۳۸

ممنون از پاسختون

این قسمت رو متوجه نشدم منظورتون از کلید چی هست؟ "در نظر داشته باشید بهتر که برای هر بخش یک کلید در نظر بگیرید و صرفا _nonce استفاده نکنید."

Ebrahim Shahi ۲۰ شهریور ۱۴۰۲، ۰۹:۰۶

یعنی کلید‌های هر بخش متفاوت باشه

شما وقتی میخوایید nonce برای اپدیت محصول تعریف کنید بهتره کلید product_update به همراه id محصول رو تعریف کنید و موقع چک کردن همون گزینه رو چک کنید.

اگر تو همه بخش‌های کدتون _nonce تعریف کنید هم برای اپدیت محصول هم حذف کامنت و کلی کار دیگه استاندارد نیست.

موفق باشید

بهنام مرادی ۲۰ شهریور ۱۴۰۲، ۰۹:۱۳

منظورتون از کلید چی هست که میگید متفاوت باشه؟ میشه لطفا دوتا مثال بزنید کد رو بزارید من این کلیدی که میگین رو بفهمم. اصلا تعریفی از کلید در ذهن من نیست. و حقیقت جواب سوال اولم رو هم هنوز نگرفتم. دوتا if فرستادممیخوام بدونم در وهله اول آیا هر دو درست هست؟ کارش رو درست انجام میده و دوم اینکه اگر هر دو درست هست، کدوم روش درست‌تر یا مناسب‌تر هست؟

Ebrahim Shahi ۲۰ شهریور ۱۴۰۲، ۱۰:۵۲

سلام 

توی شرط اول اگر nonce ست نشده باشه، شرط درست نمیشه و دستور die اجرا نمیشه. که اشتباهه به نظرم. 

فک می‌کنم این دستور کافی باشه:

 if(!wp_verify_nonce($_POST['_nonce'])){
        die('Access Denied!');
    }

 

 تابع wp_verify_nonce اگر nonce ست نشده باشه هم مقدار false بر می‌گردونه.

آزاده نوری ۲۰ آذر ۱۴۰۲، ۰۹:۴۳