سایر بخش های سری آموزشی " ایجاد افزونه وردپرس "

 در این بخش می خوانیم :

Nonce ها

نتیجه گیری

 

Nonce ها

Nonce ها اعداد تولید شده ای توسط وردپرس هستند ، که به منظور تایید منشاء (منبع) و هدف درخواست های ارسالی به وردپرس ، برای کمک به تامین امنیت وردپرس ، وجود دارند .
هر Nonce تنها یکبار می تواند مورد استفاده قرار گیرد و شامل یک قابلیت بررسی است که ارسال کننده را تایید کند .
می توانید Nonce را به عنوان یک توکن برای اطمینان از یک عمل معتبر در نظر بگیرید .

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

Nonce ها می توانند برای بررسی اینکه ، آیا هدف واقعی کاربر جاری انجام دادن عمل انتخاب شده است یا خیر ،مورد استفاده قرار گیرند.

زمانی که می خواهید یک لینک عملیاتی ایجاد می کنید ، از تابع wp_create_nonce()  برای اضافه کردن یک Nonce به آن به صورت زیر استفاده کنید .

function wporg_frontend_delete_link() {
    if ( ! current_user_can( 'edit_others_posts' ) ) {
        return;
    }
  
    $url = add_query_arg(
        array(
            'action' => 'wporg_frontend_delete',
            'post'   => get_the_ID(),
            'nonce'  => wp_create_nonce( 'wporg_frontend_delete' ),
        ),
        home_url()
    );
  
    printf( '<a href="%s">Delete</a>', esc_url( $url ) );
}

پارامتر ارسال شده به تابع ، این اطمینان را می دهد که یک nonce یکتا برای آن عمل خاص ایجاد شده است .

سپس ، زمانی که شما درخواست حذف یک لینک را پردازش می کنید ، می توانید بررسی کنید که آیا همان nonce ای که انتظار آن را دارید ، ایجاد شده است یا خیر :

if ( isset( $_REQUEST['action'] ) && 'wporg_frontend_delete' === $_REQUEST['action'] ) {
    add_action( 'init','wporg_frontend_delete_post' );
}
  
function wporg_frontend_delete_post() {
    if ( ! current_user_can( 'edit_others_posts' ) )  {
        return;
    }
  
    if ( ! wp_verify_nonce( $_REQUEST['nonce'], 'wporg_frontend_delete' ) ) {
         return;
    }
  
    // Get the ID of the post.
    $post_id = ( isset( $_REQUEST['post'] )) ?  get_post( (int) $_REQUEST['post'] ) : false;
  
    // No post? Oh well..
    if ( empty( $post_id ) ) {
         return;
    }
  
    // Delete post
    wp_trash_post( $post_id );
  
    // Redirect to admin page
    $redirect = admin_url( 'edit.php' );
    wp_safe_redirect( $redirect );
  
    exit;
}

 

نتیجه گیری

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

انجام این دو کار (معتبر بودن کاربر و داشتن سطح دسترسی متناسب با عملیات مورد نظر ) با هم باعث می شود که مطمئن شوید ، داده ها زمانی تغییر پیدا می کنند که کاربر واقعی وردپرس می خواهد آنها را تغییر دهد .