انتشار نسخهء 2.3.01 سیستم رجیستر و لاگین

دانلود: دانلود

در این نسخه:

- چندتا باگ رفع شد.

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

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

- امکان بخاطرسپاری لاگین (گزینهء remember me) در این نسخه بصورت فوق العاده قابل کانفیگ و منعطفی در اومده. الان میتونیم تعیین کنیم که کاربران بتونن چند و چگونه گزینه های بخاطرسپاری در فرم لاگین داشته باشن. مثلا میتونیم بخاطرسپاری برای 5 دقیقه، یک ساعت، یک هفته، یک ماه، یک سال و غیره رو بصورت یک منو بجای چک باکس remember me که در نسخه های قبلی وجود داشت داشته باشیم.
این منو میتونه یک یا هر تعدادی گزینه داشته باشه.
ضمنا گزینه های بخاطرسپاری کاربران عادی و ادمین از هم کاملا جداست و میتونن هرکدام آپشن های کاملا متفاوتی داشته باشن. به این میگن آخر انعطاف و قابلیت پیکربندی!
این زمانهای بخاطرسپاری در سمت سرور هم چک میشن و بنابراین قابل دور زدن توسط کاربران در سمت کلاینت نیستن. بطور مثال شما میتونید کاربران رو مجبور کنید که بخاطرسپاری لاگین اونها بیش از 8 ساعت نباشه.
برای اطلاع بیشتر، متغییرهای کانفیگ autologin_ages و admin_autologin_ages در فایل config_identify.php رو نگاه کنید.

- امکان دیگر اضافه شده اینه که اگر یادتون باشه موقعی که ثبت نام صورت میگرفت، کاربر بصورت خودکار تا زمان باز بودن مرورگر لاگین میشد. البته این لاگین خودکار بعد از ثبت نام رو میشه با false کردن متغییر login_upon_register در فایل config_register.php غیرفعال کرد.
الان یک متغییر دیگر هم به این جریان اضافه کردم بنام login_upon_register_age که میتونید باهاش طول عمر این لاگین خودکار رو تعیین کنید. مثلا تعیین کنید که کاربر فقط برای یک ساعت لاگین بمونه، یا هر زمان دیگری که میخواید، مثلا تا همون باز بودن مرورگر.

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

- طول عمر لاگین های خودکار که تا باز بودن مرورگر برقرار هستن الان بوسیلهء متغییر max_session_autologin_age در فایل config_identify.php قابل محدود کردن است. بنده مقدار پیشفرض رو روی 12 ساعت تنظیم کردم.
این گزینه هم از نظر امنیتی اهمیت داشت، چون کوکی هایی که طول عمرشون به اندازهء باز بودن مرورگر تعیین میشه عملا محدودیت زمانی ندارن و این به دلایلی که در گزینهء قبلی توضیح دادم میتونه خطرناک باشه.
الان میتونید برای عمر اینطور لاگین ها یک حداکثر تعیین کنید. اگر مرورگر کاربر زودتر از این زمان بسته شد، کوکی پاک شده و لاگین خودکار از بین میره، و اگر مرورگر همینطور باز بمونه بازهم طول عمر لاگین خودکار نمیتونه از زمان تعیین شده بیشتر بشه، چون در سمت سرور چک میشه.

- الان دیگه تغییر ایمیل هم مثل موقع ثبت نام میتونه نیاز به تایید صحت ایمیل داشته باشه (با ارسال لینک فعال سازی به ایمیل مورد نظر)
این گزینه هم باز آخر کانفیگ و انعطاف رو داره. میشه تعیین کرد که تغییر ایمیل نیاز به تایید صحت ایمیل داشته باشه، نداشته باشه، یا از همون حالتی که برای ثبت نام وجود داره (متغییر کانفیگ email_verification_needed در فایل config_register.php) پیروی کنه. ضمنا تنظیم جداگانه برای ادمین و کاربران عادی وجود داره. پیشفرض رو روی این گذاشتم که برای اکانتهای معمولی از تنظیم email_verification_needed پیروی بشه (که اونم بطور پیشفرض خاموشه)، و برای تغییر ایمیل اکانت ادمین نیازی به تایید صحت ایمیل نباشه.

- در این نسخه تنظیمات جداگانه برای تغییر خودکار کلید لاگین ادمین و کاربران عادی وجود داره. اینم باز امکان آخر کانفیگ پذیری و تطبیق با سناریوهای بیشتری رو میده. مثلا ممکنه بعلت کاهش بار روی دیتابیس و سرور بخوایم تغییر خودکار کلید لاگین رو برای کاربران عادی خاموش کنیم اما برای ادمین روشن باشه (بخاطر مسائل امنیتی)؛ البته تنها دلیلش این نیست؛ یک دلیل دیگه میتونه این باشه که میخوایم اجازه بدیم کاربران بتونن همزمان از چند سیستم لاگین باشن؛ هرچند از نظر امنیتی بهتره اینطور نباشه.

- الان میشه تعیین کرد که برای انجام عملیات ادمینی مثل حذف یا تایید کردن اکانتهای کاربران، نیاز به ورود پسورد ادمین باشه. این کار با متغییر کانفیگ admin_operations_require_password در فایل config_admin.php انجام میشه. مقدارش اگر 0 باشه یعنی نیازی به ورود پسورد نیست، اگر 1 باشه یعنی نیاز هست، اگر عددی بزرگتر از 1 باشه بدین معناست که نیاز به ورود پسورد هست اما هر بار که ادمین پسورد رو وارد میکنه بعد تا اون مدت زمان بر حسب ثانیه دیگه نیازی به ورود مجدد پسورد نداره؛ البته برای این یک چک باکس در اون قسمت ورود پسورد میاد که ادمین اگر خودش انتخابش کنه باعث میشه که در دفهء بعدی تا اون زمان خاص نیازی به ورود مجدد پسورد نباشه.

خب این از ویژگیهای این نسخه!
فقط این هست که این نسخه رو خیلی تست نکردم چون نه دیگه وقت داشتم نه حس و حال و اولویتش رو.
use at your own risk
ولی خب نه اینکه هیچ تستی نکرده باشم؛ تاجایی که بنظرم صرف میکرد (واسه خودم) تست و باگیابی و باگزدایی کردم.
اگر باگی چیزی دیدید گزارش کنید خب!

———————–

لامصب یه پروژه ببین چقدر گسترده و پیچیدس چقدر زمان میبره چقدر امکانات چقدر نکته داره چقدر … .
نمیدونم یک سال چقدره همش اوقات فراغتم رو روی این پروژه علاف بودم. البته عوضش یک چیز خوبی شده که تقریبا هرچی امکانات و انعطاف و تمهیدات امنیتی بنظر خودم یا دیگران رسیده تاحالا توش گذاشتم. تمرین خوبی بود. با این حال هنوزم نمیشه گفت که اونقدری که باید و میتونه کامله. یکسری موارد کمبود هم به مسائل مهندسی نرم افزار مثل شیء گرا کردن و طوری درآوردن که دیگران هم بتونن راحت در برنامه های خودشون ازش استفاده کنن و اینها مربوط میشه. بعضی امکانات هم هست که فعلا بیخیال شدم. ولی نمیدونم شاید دوباره وقت کردم و حال و حوصله داشتم روش کار کردم. ولی فکر میکنم زیاد هم مهم نیست فعلا و ارزشش رو نداره.
یکی از این امکانات که میگم اینه که این سیستم طوری طراحی نشده که امکان لاگین بودن همزمان از چند جا رو بده (مثلا همزمان از روی چند PC و گوشی و غیره). هرچند همین الان هم میشه طوری کانفیگش کرد که این اجازه رو بده، ولی درمقابل تمهیدات و مزایای امنیتیش به این شکل به میزان قابل توجهی تضعیف میشه. مثلا اگر کلید لاگین خودکار موقع لاگین یا لاگ آوت یا، بسته به کانفیگ، در هر درخواست، تغییر نکنه، اونوقت میشه همزمان از روی هر چندتا سیستم لاگین بود، ولی امنیت پایین میاد درمقابل و مثلا اگر اطلاعات کوکی احراز هویت توسط یک هکر سرقت بشه اونوقت میتونه با خیال راحت و بدون محدودیت ازش استفاده کنه (مگر اینکه کاربر خودش کلید لاگین رو با امکانی که برای این مسئله در سیستم گذاشتم Regenerate کنه که اونوقت بقیهء سیستمها همه از لاگین خارج میشن و اطلاعات دست هکر هم بی استفاده میشه). البته خوبیش اینه که حداقل تنظیمات ادمین در این زمینه از کاربران عادی جداست و میتونیم مثلا برای ادمین تعیین کنیم که کلید لاگین بصورت خودکار عوض بشه، ولی برای کاربران معمولی اینطور نباشه؛ البته این بازم بنظر من چندان خوشایند نیست و مسئله رو بقدر کافی توجیه نمیکنه.
بهرحال من فکر میکنم درحال حاضر این مسئلهء امکان لاگین همزمان از روی چند سیستم چندان هم مهم نیست و اولویت نداره. بهرحال هم این امکان هرکاری هم که بکنی امنیت رو تاحدی پایین میاره؛ یعنی خود لاگین موندن در چند جا، برای امنیت چیز جالبی نیست (ولی میشه تاحدی بهترش کرد اگر سیستم رو از ابتدا برای ساپورت این حالت طراحی کنیم).

پاسخ دهید

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

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>