ایجاد لینک فعال سازی در asp.net
با سلام خدمت تمام برنامه نویسان ایرانی
یه سوال داشتم. میخواستم ببینم کسی میدونه چطور میشه لینک فعال سازی برای کاربری که تازه ثبت نام کرده ایجاد و به میلش فرستاد؟
حالا به میل فرستادنش مشکل نیست فقط در رابطه با لینک یه ایده ای که توی ذهنمه اینه که مثلا من بیام userid تولید شده برای اون کاربر رو به عنوان querystring به لینک اضافه کنم و براش بفرستم. بعد که روش کلیک کرد با توجه به اون userid فیلد مربوط به فعال شدن کاربر رو true کنم.
اگه ایدم درسته بگین!
با تشکر
نقل قول: ایجاد لینک فعال سازی در asp.net
خوبه!
ID هم طبیعتا باید Unique باشه.
نقل قول: ایجاد لینک فعال سازی در asp.net
اگه هر دفعه لینک ثابتی رو بفرستید و فقط user id به اون اضافه بشه ، هر کسی با دونستن user id نفر دیگه میتونه بجاش فعال سازی رو انجام بده و ...
نقل قول: ایجاد لینک فعال سازی در asp.net
بله . براي ID ميتونيد از Guid استفاده كنيد . كسي UserId ديگري رو نميدونه . چون UserId به ايميل اون شخص ارسال ميشه . و يا ميتونيد خودتون QueryString هايي رو خودتون با كدنويسي هاي پيشرفته ايجاد كنيد و از اون استفاده كنيد . در ضمن كنترل كنيد كه براي هر كاربر فقط يك بار عمل فعالسازي انجام بشه . اگه براي كاربري كد اشتباه ثبت شد ميتونيد كاربر رو غير فعال كنيد . اين هم اقدامات امنيتي .
نقل قول: ایجاد لینک فعال سازی در asp.net
چون عمل فعال سازی ممکنه در مواقع مختلفی ( البته بسته به مورد استفاده شما) انجام بپذیرد، بهتر است هر گاه یک کاربر نیاز به فعال سازی داشت، یک کلید رمزنگاری متقارن ایجاد شود و در پایگاه داده ذخیره شود. سپس پارامتر های لینک فعال سازی اینطوری ساخته بشن.
1. UserID
2. رمز شده ی UserID
کاملا امنه.
نقل قول: ایجاد لینک فعال سازی در asp.net
ببينيد شما برنامه نويس هستيد و همه چيز تحت كنترل شماست . هر وقت كاربرتون غير فعال شد يك ID جديد توليد كنيد و اون رو در قسمت ID مربوط به كاربرتون ثبت كنيد و يك Email براي فعالسازي مجددش بفرستيد . همه چيز تحت كنترل شماست و ميتونيد هر كاري انجام بديد ....
نقل قول: ایجاد لینک فعال سازی در asp.net
یه سوال:
آیا میشه به این صورت لینک فعال سازی رو ساخت: بگیم ما که User_ID رو داریم و از Email شخص توسط QueryString می خونیم. بیایم یه صفحه aspx بسازیم و یه متد توش طراحی کنیم که در Page_Load اجرا بشه. چی کار می کنه User_ID رو می گیره و می ره تو جدول Users مثلا فیلد State یا Status رو True می کنه. بعد Redirect بشه به یک صفحه دیگه.
این روش خوبه یا بد؟
نقل قول: ایجاد لینک فعال سازی در asp.net
در کنار User_ID یه ID یکتای فعال سازی یک بار مصرف هم باید باشه. اون رو ذخیزه کنیم و توی QueryString هم قرار بدیم.
چون User_ID معمولا ثابته و ممکنه افراد دیگه به دستش بیارن. پس نباید بتونن کاربر رو فعال کنن.
میتونید یه جدول بسازید که حاوی User_ID (کلید خارجی از جدول Users و کلید اصلی همین جدول) و یک Activation_ID که کد فعال سازی باشه.
کاربر که غیر فعال شد یه رکورد توی این جدول اضافه می شه، فعال هم که شد، حذف می شه.
نقل قول: ایجاد لینک فعال سازی در asp.net
من باشم از guide استفاده می کنم
نقل قول: ایجاد لینک فعال سازی در ASP.NET
نقل قول:
نوشته شده توسط
iman_ad
من باشم از guide استفاده می کنم
مهم اینه که یکتا و کاملا تصادفی باشه. 32 کاراکتر طولش باشه بد نیست.
نقل قول: ایجاد لینک فعال سازی در ASP.NET
میتونیم یه جدول Requset بسازیم که 4 تا فیلد ID,User_ID,Type,vertify رو داشته باشه(user_ID :آیدی کاربر ، ID :آیدی درخواست ، Type:نوع درخواست، vertify:برای تایید درخواست از طرف کابر یعنی وقتی رو لینکی که فرستادیم به ایمیلش کلیک کنه true بشه)
اینجوری به هر درخواستی که از طرف کاربر میاد که بستگی به نوعش(فیلد Type) میتونه مختلف باشه مثله درخواست فعال شدن اکانت یا درخواست تعویض رمز و ... یه آیدی(یعنی فیلد ID در جدول Rquest) نسبت بدیم(که میشه تصادفی هم ایجادش کرد) و توسط Querystring اون آیدی رو بفرستیم و دوباره همون رو پس بگیریم و در صورت trueبودن vertify تغییرات رو اعمال کنیم.
نقل قول: ایجاد لینک فعال سازی در asp.net
ID ها رو نباید نگه داشت. یک باید یک بار مصرف باشه. هرچه بیشتر نگه دارید احتمال لو رفتنش بیشتر میشه! به راه حل پست شماره 9 Type و LifeTime رو هم اضافه کنید، خیلی خوب میشه!
نقل قول: ایجاد لینک فعال سازی در asp.net
ببینید من که میگم خیلی ساده تر میشه حلش کرد . ببینید قرار نیست UserID رو به کسی نشون بدیم . توسط Guid یا چند تا Guid یک رشته ی تصادفی تولید میکنیم و اون رو تو جدول کاربران برای کاربر ذخیره میکنیم . یه ایمیل هم با همون QueryString و Guid تولید شده به ایمیل کاربر میفرستیم . خوب با کلیک بر روی اون کاربر با یه QueryString به سایت برمیگرده و ما با اون QueryString کاربر مورد نظر رو فعال میکنیم .
آیا این روش مشکلی داره ؟
نقل قول: ایجاد لینک فعال سازی در asp.net
البته چیزی که میگید مشکلی نداره! ولی دوستان دنبال بهترین و جامع ترین راه اند، نه ساده ترین راه.
افزودن تمهیدات امنیتی بسته گی به مورد استفاده داره و اهمیت موضوع داره.
نقل قول: ایجاد لینک فعال سازی در ASP.NET
مشکل که نداره ولی این راه حل زیاد اصولی به نظر نمیاد میشه گفت یه جورایی شاید کار راه انداز باشه ولی راه خوبی ام نیست
نقل قول:
اون رو تو جدول کاربران برای کاربر ذخیره میکنیم
مثلا به چه عنوانی میخواید تو جدول کاربر اون رو ذخیره کنید؟ کوئری استرینگ واسه فعالسازی اکانت؟!
شاید به نظر راه ساده ای بیاد ولی همیشه ساده بودن ملاک نیست به نظر من روشی که استفاده میشه باید اولا اصولی باشه دوما واسه موارد مشابه هم کاربرد داشته باشه
البته شاید تو پروژه های کوچیک و کم اهمیت مشکل خاصی نداشته باشه ولی من شخصا نظرم اینه که باید عادت کنیم زیبا و اصولی کد بزنیم تا به این کار عادت کنیم حتی تو پروژه های کوچک و یا حتی تمرینی.
نقل قول: ایجاد لینک فعال سازی در ASP.NET
نقل قول:
ID ها رو نباید نگه داشت. یک باید یک بار مصرف باشه. هرچه بیشتر نگه دارید احتمال لو رفتنش بیشتر میشه!
این که مشکلی نیست میشه به راحتی بعد از اتمام کار اون سطر رو از جدول پاک کرد
نقل قول: ایجاد لینک فعال سازی در ASP.NET
نقل قول:
نوشته شده توسط
profnami
میخوام بدونم که این روش چه مشکل امنیتی داره ؟
یه فیلد میزاریم با اسم ActivationCode و در اون کدفعالسازی رو ذخیره میکنیم .
بنده صریحا مشکل امنیتی نمی بینم. اما ...
1. بهتره یک جدول جداگانه برای ذخیره ی این کدها در نظر بگیرید که بعد از انجام عمل، حذف بشه.
2. بهتره برای انجام عمل یه مهلت قرار بدید تا مجبور نباشید تا ابد منتظر فعال سازی کاربر بمونید.
3. شما که دارید یه جدول دیگه میسازید، پس یه فیلد Type هم بهش اضافه کنید که فقط مختص قعال سازی نباشه و بتونید توش کارای دیگه ای که بنابه منطق برنامتون ممکنه نیاز باشه، استفاده کنید.
نقل قول: ایجاد لینک فعال سازی در asp.net
با سلام
دوستان به نظر من خیلی خیلی ساده تر میتونیم این مسئله حل کنیم!!! فرض کنیم جدول کاربران ما شامل فیلدهای زیر باشه:
{ UserID, UserName, pass, Email, Status }
بسیار خوب فیلد کد کاربر که خودکاره و برای هرکسی منحصر به فرده, از طرفی نام کاربری و ایمیل نیز خاصیت یکتایی دارند به صورت منطقی!! خب با این تفاسیر کد فعال سازی رو به صورت زیر درست می کنیم که احتمال هکش به صفر برسه.
در لینک ایجاد شده نام کاربری یا کد کاربری + یک هش تولید شده از ترکیب (کد کاربری + نام کاربری + ایمیل + رشته ی ثابت برای امنیت بیشتر ) ایجاد می کنیم. در این حالت فقط کد کاربری و این رشته ی هش شده نمایش داده میشود که فک نکنم کسی بفهمه چیه.
زمانی که هم این صفحه با این لینک درخواست شد, دقیقا عکس این عمل (کرک) را انجام می دهیم تا از صحت درخواست مطمئن شویم. بدین ترتیب که مثلا کد کاربری 1000 توسط لینک فرستاده شده است, این رکورد را در جدول کاربران یافته, و این مراحل هش را روی این رکورد مورد نظر انجام می دهیم, حال اگر رشته ی بدست آمده مطابقت داشت با رشته ی ارسال شده توسط لینک, نتیجه میگیریم که این درخواست, درخواست امن است و کاربر باید فعال شود, در غیر این صورت متوجه غیرقانونی بودن درخواست شده و جلوی آن را می گیریم. (مثلا ای پی آن را ذخیره و برای مدت زمانی مشخص درخواست های ارسال شده از طرف این ای پی را نادیده می گیریم و از این جور کارها البته اگه حوصلشو دارین!!!!!!!!!!!!:متفکر:)
به همین راحتی!!!!!!!!!
به عنوان مثال:
ActivationUser.aspx?ID=283&Code=hdbfjhvdSBDkjzdbvj zhdn,zmnbvmvb
برای امنیت بیشتر می توانید هنگام ساختن لینک به کد کاربری مقداری تعیین شده اضافه کنید که حتی شماره رکود شما هم فهمیده نشود. خلاصه خیلی مسائل میتونین پیاده سازی کنین.
موفق باشید
نقل قول: ایجاد لینک فعال سازی در asp.net
در مورد این قضیه دوستان سمپلی پیدا کردند ؟ چه در این سایت چه در سایتهای خارجی
نقل قول: ایجاد لینک فعال سازی در asp.net
نقل قول:
نوشته شده توسط
profnami
میخوام بدونم که این روش چه مشکل امنیتی داره ؟
یه فیلد میزاریم با اسم ActivationCode و در اون کدفعالسازی رو ذخیره میکنیم .
به نظم منم این روش خوبه البته بهتره یه فیلد دیگه در همون جدول یا جدول دیگر به این فیلد اضافه بشه با نام Accepted و از نوع بولین باشه یعنی زمانی که فعال شد مقدارش true بشه و وقتی کاربر می خواد وارد شه اول اینا چک کنه اگر false بود با پیغامی به او نشان دهد که هنوز نام کاربری اون فعال نشده و از نظر امنیتی فکر نکنم مشکلی داشته باشه چون این قسمت که به وسیله کد هست و برای کد فعال سازی نیز همون طوری که اشاره شد بهتره Guid باشه چون هم منحصر به فرده و هم اینکه الگوریتم مشخصی نداره تا کسی بخواد از اون در کوئری استرینگ استفاده کنه.......