روزهای خط خطی  | امنیت وردپرس با Nonce

امنیت وردپرس با Nonce

Wordpress Nonceدر مورد هر محصولی تامین امنیت نقش مهمی در جلب رضایت مشتری ایفا می کنند خصوصا در مورد نرم افزارهای آنلاین و کدهای سازنده ی وب سایت ها که بعضا ممکن است بر اثر یک خطای امنیتی کوچک در کمتر از چند ساعت اطلاعاتی که در عرض چندین سال جمع آوری شده است را از بین ببرد یا یک شبه یک تجارت پر سود را از بین ببرد.

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

کوکی در نقش راهروی مخفی

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

از خودتان در مقابل خودتان حفاظت کنید

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

روش قدیمی HTTP_REFERER

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

معایب استفاده از  HTTP_REFERER

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

استفاده از Nonce

Nonce عددی است یکبار مصرف و برای تصدیق نیت کاربر در وردپرس مورد استفاده قرار می گیرد و در واقع شبیه یک کلمه ی عبور یکبار مصرف است. البته در وردپرس Nonce به معنای واقعی کلمه پیاده سازی نمی شود چرا که کلیدهای الکترونیکی هر دوازده ساعت یکبار عوض می شوند و به مدت بیست و چهار ساعت نیز معتبر می باشند. پس می توان گفت در هر زمان دو کلید آخر و ما قبل آخر معتبر خواهند بود. ایده ی کار هم بسیار ساده است: برای اطمینان از عمدی بودن درخواست کاربر باید بررسی کنیم که آیا درخواست وی از داخل محیط مدیریت وردپرس ارسال شده است یا نه. قبل از ارسال درخواست یک Nonce تولید می شود که همراه سایر اطلاعات به صفحه ی بعد ارسال شده و مورد بررسی قرار می گیرد. Nonce های هر محیط وردپرس، هر کاربر، هر عملیات، هر شیء مورد عملیات و هر زمان عملیات منحصر به فرد بوده و این بدان معناست که تنها تغییر یکی از این شرایط باعث نامعتبر شدن Nonce خواهد شد. به این ترتیب و به عنوان مثال اگر ما Nonce  مربوط به پاک کردن یک مطلب خاص از روی یک سایت وردپرسی خاص را داشته باشیم منوط به اینکه دوره ی اعتبار بیست و چهار ساعته ی آن به اتمام نرسیده باشد، با استفاده از آن تنها قادر خواهیم بود همان مطلب را از روی همان سایت پاک کنیم که البته مضحک خواهد بود.

محافظت از فرم ها با استفاده از Nonce

برای محافظت فرم ها می توانیم از تابع wp_nonce_field استفاده کنیم که یک فیلد مخفی حاوی Nonce در فرم ما ایجاد می کند. نمونه ی کد زیر نحوه ی استفاده از این تابع را نشان می دهد.

 PHP | 
 
 copy code |
?

1
<?php
2
	if ( function_exists('wp_nonce_field') ) 
3
		wp_nonce_field('unique_name'); 
4
?>
5

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

محافظت از لینک ها با استفاده از Nonce

تابع wp_nonce_url نیز عملیاتی مشابه را روی لینک ها انجام می دهد. دو پارامتر ورودی این تابع به ترتیب عبارتند از لینکی که باید مورد محافظت قرار گیرد و یک نام منحصر به فرد. خروجی این تابع یک رشته خواهد بود که لینک را به همراه Nonce مربوطه در اختیارمان خواهد گذاشت.

 PHP | 
 
 copy code |
?

1
<?php
2
	$link = 'www.link.com';
3
	if ( function_exists('wp_nonce_url') )
4
		wp_nonce_url($link, 'unique_name';
5
?>
6
<a href="<?php echo $link; ?>">link</a>
7

بررسی و تصدیق Nonce

برای بررسی و تصدیق Nonce از تابع check_admin_referer مطابق مثال زیر استفاده می شود. آرگومان ارجاعی به تابع در واقع نام منحصر به فرد Nonce مورد بررسی خواهد بود. خروجی تابع در صورت تصدیق Nonce عبارت منطقی True خواهد بود.

 PHP | 
 
 copy code |
?

1
<?php check_admin_referer('unique_name'); ?>

3 پاسخ به “امنیت وردپرس با Nonce”

  1. omid گفت:

    خیلی جالب بود اما اگر همراه با یک مثال می بود خیلی بهتر و قابل فهم تر بود چون یه مقدار پیچیده هست

  2. حمیدرضا گفت:

    بسم الله الرحمن الرحیم
    اللهم صل علی محمد و آل محمد و عجل فرجهم

    سلام خیلی ممنون
    انشاءالله سربلند باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *