امنیت ورودی

امنیت ورودی

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

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

 

اعتبارسنجی

پاک سازی

نتیجه

 

 

هر زمانی که داده ای به وردپرس وارد می شود ، چه از طریق فرم ارسال شده و چه از طریق منابع خارجی مانند feed ها، فراخوانی API ها و … ، شما باید جهت تامین امنیت وردپرس ، آنها را اعتبارسنجی کرده و از صحت آنها مطمئن شوید .

 

اعتبارسنجی :
اعتبارسنجی داده ها یعنی اطمینان از اینکه داده های دریافت شده از طرف کاربر یا سایر منابع خارجی به همان صورتی که مد نظر شماست ، دریافت می شوند .
به عنوان مثال کد زیر را که یک کد پستی را از کاربران دریافت میکند را در نظر بگیرید :

<input id="my-zipcode" type="text" maxlength="5" name="my-zipcode" />

این فیلد متنی به کاربر اجازه می دهد که حداکثر ۵ کاراکتر را ، بدون محدودیت در نوع کاراکترها وارد کند .
کاربران می توانند کاراکترهای مناسبی مانند ۱۱۲۲۱ و یا کاراکترهای نامناسبی مانند Eval( را وارد کنند .

در هنگام پردازش فرم ، کد شما باید هر فیلدی را برای داده آن بررسی کند و هرگونه محتوای غیرمرتبطی را رد کند .
به عنوان مثال می توانید کد پستی (my-zipcodeconsists) را بررسی کنید که فقط ۵ عدد باشد .

// Get only the integer value from my-zipcode
$safe_zipcode = intval( $_POST
['my-zipcode'] ); if ( ! $safe_zipcode ) { $safe_zipcode = ''; } // Get only the first five digits of the ZIP code. if ( 5 < strlen( $safe_zipcode ) ) { $safe_zipcode = substr( $safe_zipcode, 0, 5 ); } // The ZIP code is now safe to save to a post. update_post_meta( $post->ID, 'my_zipcode', $safe_zipcode );

خاصیت maxlenght در فیلد ورودی ما به مرورگر وابسته است یعنی ممکن است مرورگر به طور کلی آن را به هر دلیلی اجرا نکند ، بنابراین باید این فیلد در سمت سرور نیز توسط پی اچ پی اعتبارسنجی شود .
تابع intval() ورودی کاربر را به یک عدد صحیح (integer) تبدیل می کند و چنانچه داده ورودی کاربر مقدار غیرعددی داشته باشد ، به مقدار صفر تبدیل می شود ، پس شما بر اساس نتیجه این تابع مقدار خالی (empty) یا کدپستی را در بانک اطلاعاتی ذخیره می کنید .
این نوع اعتبارسنجی بسیار شبیه اعتبارسنجی خود وردپرس ( اعتبارسنجی لیست سفید یا Whitelist ) است و به کاربر تنها اجازه ورود داده های مورد نظر را می دهد .
در اینجا یک مثال دیگر بررسی و اعتبارسنجی توسط لیست سفید (Whitelist) وردپرس را مشاهده می کنید .

$allowed_keys = array('author', 'post_author', 'date', 'post_date');
 
$orderby = sanitize_key( $_POST['orderby'] );
 
if ( in_array( $orderby, $allowed_keys, true ) ) {
 // modify the query to sort by the orderby key
}

 

پاکسازی (Sanitizing)

پاکسازی یک روش بسیار کارآمد برای تمیزکردنداده های کاربر از هرگونه کاراکتر یا محتوای نامناسب می باشد .

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

به عنوان مثال ، یک فیلد ورودی که از کاربر عنوان نوشته را میگیرد ، در نظر بگیرید :

<input id="title" type="text" name="title" />

شما می توانید این فیلد ورودی را با تابع sanitize_text_field()  پاکسازی کنید تا هیچ خطر امنیتی برای وردپرس رخ ندهد .

$title = sanitize_text_field( $_POST['title'] );
update_post_meta( $post->ID, 'title', $title );

در پشت صحنه تابع sanitize_text_field()  چندین کار مانند بررسی مقدار فیلد برای متناسب بودن با UTF-8 یا تبدیل کاراکترهای خاص به معادل آنها در HTML و … را انجام می دهد .

البته این تابع کارهای بیشتری را انجم می دهد ولی جهت کوتاه کردن بحث از ذکر همه آنها خودداری می کنیم .

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

در زیر چند نمونه از این کلاس ها را مشاهده می کنید :

 

 

sanitize_email()

sanitize_file_name()

sanitize_html_class()

 sanitize_key()

 sanitize_meta()

 sanitize_mime_type()

 sanitize_option()

 sanitize_sql_orderby()

 sanitize_text_field()

sanitize_title()

sanitize_title_for_query()

sanitize_title_with_dashes()

sanitize_user()

esc_url_raw()

wp_filter_post_kses()

wp_filter_nohtml_kses()

نتیجه

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

۱۳۹۶/۸/۵ ۲۱:۳۸:۲۵

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

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

نظر شما چیست