بررسی قابلیت های کاربر

///بررسی قابلیت های کاربر

بررسی قابلیت های کاربر

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

همانطور که قبلاً  توضیح داده شد ، شما همیشه می خواهید از حملات تزریق کد یا XSS جلوگیری کنید .

برای انجام اینکار نیاز دارید که یک کاربر را شناسایی کنید و از قابلیت ها و دسترسی های نقش کاربری او ، قبل از هرگونه عملیاتی که با بانک اطلاعاتی یا سایر قسمت های وردپرس می تواند داشته باشد ، مطلع باشید .

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

خوشبختانه وردپرس ۲ استراتژی تست شده را برای بررسی اینکه آیا کاربر دارای دسترسی کافی برای اعمال برخی کارهای مهم را دارد یا خیر را ارائه داده است :

  • قابلیت های کاربر
  • Nonce ها

 

قابلیت های کاربر :

جهت بررسی قابلیت های هر کاربر ، بعد از ورود به وردپرس ، به صورت اتوماتیک ، یک سری قابلیت ها به کاربر اختصاص داده می شود .

به عنوان نمونه ، یک کاربر نویسنده (Author) می تواند نوشته ها را منتشر کند و یک کاربر مدیر (Administrator) می تواند تنظیمات وردپرس را مدیریت کند (قابلیت manage_options )

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

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

در مثال زیر یک تابع مفید را مشاهده می کنید که به کاربران نویسنده امکان حذف نوشته ها را توسط یک لینک در بخش کاربری سایت (Front End) را می دهد :

function wporg_frontend_delete_link() {
    $url = add_query_arg(
        array(
            'action'=>'wporg_frontend_delete',
            'post'=>get_the_ID();
        ),
        home_url(),
    );
    echo "<a href='{$url}'>Delete</a>";
}

 

اکنون در اینجا یک مثال را می بینید که توسط یک تابع ، چگونگی کنترل درخواست های حذف نوشته ها را نشان می دهد :

if ( isset($_REQUEST['action']) && $_REQUEST['action']=='wporg_frontend_delete' ) {
    add_action('init','wporg_frontend_delete_post');
}
 
function wporg_frontend_delete_post() {
 
    // 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;
}

 

کد بالا به هر بازدیدکننده ای از سایت ، امکان کلیک کردن روی لینک حذف را ، برای حذف یک نوشته می دهد .

هرچند که شما می خواهید تنها کاربران دارای نقش نویسنده و یا بالاتر بتوانند روی لینک حذف کلیک کنند .

 

اگر هر کسی بتواند به لینک حذف نوشته ها دسترسی داشته باشد ، ممکن است بعد از مدت زمان بسیار کوتاهی ، هیچ نوشته ای در سایت برای نمایش باقی نماند .

بنابراین شما قبل از اجرای هر دستوری باید مطمئن باشید که کاربران معمولی تنها می تواند چند کار معمولی مانند دیدن نوشته ها و کاربران نویسنده و مدیر می توانند یکسری کارهای بیشتر مانند حذف نوشته ها را انجام دهند ( باید سطح دسترسی و قابلیت های هر کاربر را قبل از اجرای دستورات خود در افزونه را چک کنید) .

پس برای ایجاد لینک ، کدی مانند مثال زیر را باید داشته باشید :

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();
        ),
        home_url(),
    );
    echo "<a href='{$url}'>Delete</a>";
}

 

در هر دو حالت ، کاربر جاری را برای داشتن قابلیت edit_other_post ، قبل از اجرای هر عملیاتی مورد بررسی و تایید قرار می دهیم .

اگر کاربر تایید نشود ، هیچ کاری انجام نمی شود

 

آیا افزونه شما بعد از بررسی قابلیت ها و نقش کاربران ، برای اجرای هر دستور ، کاملاً امن شده است ؟

نه کاملاً – برای تکمیل امنیت افزونه خود باید بدانید که چگونه Nonce ها را ایجاد کنید .

در بخش های بعدی با Nonce ها آشنا می شوید .

۱۳۹۴/۶/۱۴ ۱۰:۵۲:۴۴

درباره نویسنده:

هدف ما در تیم راهنمای وردپرس ارائه خدمات به علاقه مندان در حوزه وب و بخصوص وردپرس و در نهایت ایجاد کسب و کار و به ثمر رسیدن ایده های شما دوستان خلاق میباشد.

نظر شما چیست