1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

اضافه کردن امنیت و عضویت در صفحات وب ASP.NET

شروع موضوع توسط AftabGardoon ‏8/2/19 در انجمن ASP.NET

Tags:
  1. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    ایجاد یک صفحه فقط برای اعضا:
    در زمان وجود صفحه همه می توانند وارد هر کدام از صفحات وب سایت شما شوند. اما ممکن است بخواهید صفحاتی داشته باشید که فقط در دسترس افرادی باشد که ثبت نام کرده اند (یعنی همان اعضا). ASP.NET به شما اجازه می دهد صفحاتی ایجاد کنید که فقط در دسترس اعضای ثبت نام شده قرار می گیرد. به این صورت که اگر یوزر ناشناس سعی به وارد شدن چنین صفحاتی داشته باشد، می توانید او را به صفحه ی ثبت نام راهنمایی کنید.

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

    در روت مربوط به سایت یک فولدر جدید ایجاد کنید. ( در نوار روی فلش زیر New کلیک کرده و سپس New Folder را انتخاب کنید.)

    فولدر جدید را با عنوان Members نام گذاری کنید.

    در داخل این فولدر صفحه ای با نام MembersInformation.cshtml ایجاد کنید.
     
  2. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    محتوای زیر را جایگزین محتوای موجود کرده و آن را مارک آپ کنید:

    کد:
    @{
        if (!WebSecurity.IsAuthenticated) {
            Response.Redirect("~/Account/Login?returnUrl="
                + Request.Url.LocalPath);
        }
        Layout = "~/_SiteLayout.cshtml";
        Page.Title = "Members Information";
    }
    < !DOCTYPE html >
    < html lang="en" >
    < head >
        < meta charset="utf-8" / >
        < title >Members Information< /title >
    < /head >
    < body >
        < p >You can only see this information if you've logged into the site. < /p >
    < /body >
    < /html >
     
  3. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    این برنامه ویژگی IsAuthenticated از آبجکت WebSecurity را تست می کند که اگر یوزر وارد سیستم شده باشد، true را گزارش می دهد. اگر یوزر وارد نشده باشد، برنامه Response.Redirect را برای ارسال یوزر به صفحه ی Login.cshtml در فولدر Account، فرا می خوانیم. URL مربوط به جهت دهی مجدد شامل یک رشته ردیف returnUrl می شود که از Request.Url.LocalPath برای تنظیم مسیر صفحه ی جاری استفاده می کند. اگر شما مقدار returnUrl را در چنین زشته ای تنظیم کنید ( و اگر URL گزارش داده شدخ یک مسیر داخلی باشد) صفحه ی log in یوزرها را پس از ورود به این صفحه باز می گرداند.

    سایت را اجرا کنید. اگر شما هنوز در داخل سیستم هستید، روی دکمه Logout در بالای صفحه کلیک کنید.

    1. در مرورگر صفحه ی /Members/MembersInformation را درخواست کنید، برای مثال URL ممکن است به این شکل باشد: http://localhost:38366/Members/MembersInformation
      ( شماره ی پورت (38366) احتمالا در URL شما متفاوت خواهد بود.)

      شما دوباره به صفحه ی Login.cshtml راهنمایی می شوید، زیرا ثبت نام نشده اید.

    2. با استفاده از اکانتی که قبلا ایجاد کرده اید، وارد شوید. دوباره به صفحه ی MembersInformation بازگردانده می شوید. چون شما وارد شده اید، این بار محتوای صفحه را می بینید.
    برای ایمن سازی دسترسی به صفحات متعدد می توانید کارهای زیر را انجام دهید:

    • کد امنیتی به هر صفحه اضافه کنید.
    • یک صفحه ی _PageStart.cshtml در فولدر، جایی که صفحات محافظت شده را نگه می دارید، ایجاد کنید و کد امنیتی به آن اضافه کنید. صفحه ی _PageStart.cshtml مانند نوعی صفحه ی جامع برای همه ی صفحات فولدر عمل می کند.
     
  4. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    ایجاد امنیت برای گروه های یوزرها (Roles):
    اگر سایت شما اعضای زیادی دارد، چک کردن اجازه ی ورود هر یوزر به طور تک تک قبل از ورود آنها به صفحه موثر نمی باشد. به جای آن می توانید گروه هایی ( یا Roles) ایجاد کنید که اعضا به آنها تعلق دارند. سپس می توانید اجازه ها را براساس role چک کنید. در این بخش شما یک admin ایجاد خواهید کرد و سپس صفحه ای ایجاد می کنید که برای یوزرهایی که در آن role هستند، قابل دسترسی می باشد. سیستم عضویت ASP.NET برای پشتیبانی چنین نقش هایی برقرار می شود. به هرحال برخلاف ثبت نام و ورود عضویت، الگوی Starter Site دارای صفحه ای که در مدیریت نقش ها به شما کمک کند، نمی باشد. (مدیریت نقش ها یک فعالیت اجرایی می باشد تا فعالیتی مربوط به سوزر.) به هرحال شما می توانید در پایگاه داده ی عضویت در WebMatrix مستقیما گروه هایی را اضافه کنید.

    1. WebMatrix در روی انتخابگر Databases کلیک کنید.
    2. در پین سمت چپ بند StarterSite.sdf را باز کرده و بند Tables را باز کنید و سپس روی webpages_Rolestable دابل کلیک کنید.
    3. نقشی به نام admin اضافه کنید. فیلد RoleId به طور خودکار پر خواهد شد. (این کلید اولیه می باشد و برای یک فیلد تعیین هویت تنظیم شده.)
    4. از مقدار مربوط به RoleId یادداشت بردارید. (اگر این اولین نقشی است که تعریف می کنید، مقدار آن 1 خواهد بود.)
    5. جدول webpages_Roles را ببندید.
    6. جدول UserProfile را باز کنید.
    7. از مقدار UserId مربوط به یک یا بیشتر از یک یوزردر جدول یادداشت بردارید وسپس جدول را ببندید.
    8. جدول webpages_UserInRoles را باز کرده و سپس مقدار UserID و UserID را وارد جدول کنید. به عنوان مثال برای قراردادن یوزر 2 در نقش admin، این مقادیر را وارد کرده اید:
    9. جدول webpages_UsersInRoles را ببندید.
      اکنون که شما نقش ها را تعریف کرده اید، می توانید صفحه ای را تنظیم کنید که برای یوزرهایی که در آن نقش هستند، قابل دسترسی می باشد.
    10. در فولدر روت مربوط به وب سایت صفحه ای به نام AdminError.cshtml ایجاد کنید و برنامه ی زیر را جایگزین محتوای موجود کنید. این صفحه ای است که اگر یوزرها اجازه ی دسترسی به صفحه ای را نداشته باشند، به آن راهنمایی خواهند شد:
    کد:
    @{
        Layout = "~/_SiteLayout.cshtml";
        PageData["Title"] = "Admin-only Error";
    }
    < p >You must log in as an admin to access that page. < /p >
    1. اگر یوزر کنونی عضوی از نقش خاصی باشد (در این مورد نقش admin)، روش Roles.IsUserInRole عبارت true را گزارش می دهد.
    2. Default.cshtml را در یک مرورگر اجرا کنیدف اما وارد سیستم نشوید، اگر تقریبا وارد شده اید، فورا خارج شوید.
    3. در نوار آدرس مرورگر AdminOnly را به URL اضافه کنید. ( به عبارت دیگر فایل AdminOnly.cshtml را درخواست کنید.) شما به صفحه ی AdminError.cshtml راهنمایی می شوید، زیرا معمولا به عنوان یک یوزر در نقش admin وارد نمی شوید.
    4. به Default.cshtml بازگردید و به عنوان یوزری وارد شوید که به نقش admin افزوده شده اید.
    5. صفحه ی AdminOnly.cshtml را مرور کنید، این بار شما صفحه را می بینید.
     
  5. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    جلوگیری از ملحق شدن برنامه های خودکار به وب سایت شما:
    صفحه ی ورود مانع ثبت نام برنامه های خودکار(که گاهی به عنوان Webrobots یا bots اشاره می شوند.) با وب سایت شما نخواهد شد. این فرایند چگونگی فعال کردن تست ReCaptcha را برای صفحه ی ثبت نام توصیف می کند.

    1. وب سایت خود را در ReCaptcha.Net ثبت کنید. وقتی که ثبت را کامل کنید، یک کلید عمومی و یک کلید خصوصی دریافت خواهید کرد.
    2. ASP.NET کتابخانه ی کمک کننده های وب را به وب سایت شما اضافه می کند، اگر نداشته باشید.
    3. در فولدر اکانت فایلی به نام Register.cshtml را باز کنید.
    4. در کد موجود در بالای صفحه خطوط زیر را پیدا کرده و با حذف کاراکترهای // آنها را بدون کامنت کنید.

      کد:
                          if (!ReCaptcha.Validate("PRIVATE_KEY"))
      {
          ModelState.AddError("recaptcha", "Captcha response was not correct");
      }
    5. کلید خصوصی ReCaptcha خود کنید را جایگزین PRIVATE_KEY کنید.
    6. در قسمت مارک آپ صفحه کاراکترهای کامنت @* و *@ را از اطراف خط زیر در صفحه ی مارک آپ حذف کنید.
      @ReCaptcha.GetHtml("PUBLIC_KEY", theme: "white") @Html.ValidationMessage("recaptcha")

    7. کلید خود را جایگزین PUBLIC_KEY کنید.
    8. عنصر را که شامل متنی است که به این شکل آغاز می شود: " فعالسازی تاییدیه ی CAPTCHA..." اگر حذف نکرده اید، حذف کنید. (کل عنصر و محتوای آن را حذف کنید.)
    9. Default.cshtml را در یک مرورگر اجرا کنید. اگر وارد سیستم شده اید، روی لینک Logout کلیک کنید.
    10. روی لینک Register کلیک کرده و با استفاده از تست CAPTCHA ثبت نام را تست کنید.
     
  6. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    اجازه ی ورود یوزرها با استفاده از یک سایت خارجی
    الگوی Starter Site دارای برنامه . مارک آپی می باشد که به یوزرها اجازه می دهد تا با استفاده از فیس بوک، Windows Live، تویتر، گوگل و یا یاهو وارد سیستم شوند. به طور پیش فرض این عملکرد فعال نیست. فرایند کلی برای اجازه دادن به یوزرها برای ورود به سیستم با استفاده از این ارائه کننده های خارجی، به شکل زیر می باشد:

    • در مورد پشتیبانی سایت خارجی که به آن تمایل دارید، تصمیم بگیرید.
    • اگر لازم است به آن سایت رفته و عملکرد login را برقرار کنید. (به عنوان مثال برای اجازه ی ورود به سیستم فیس بوک باید این کار را بکنید.)
    • در سایت خود ارائه کننده را تنظیم کنید. در بسیاری موارد فقط کافیست برخی کدها را در فایل _AppStart.cshtml بدون کامنت کنید.
    • مارک آپ را به صفحه ی ثبت نام اضافه کنید که به افراد اجازه می دهد تا برای ورود به سیستم به سایت خارجی ملحق شوند. شما معمولا مارک آپ لازم را کپی کرده و متن را کمی تغییر می دهید.
     
  7. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    افزودن امنیت به وب سایت موجود:
    فرایند قبلی در این مقاله به استفاده از الگوی Starter Site به عنوان مبنای امنیت وب سایت، تکیه می کند. اگر برای شما شروع با الگوی Starter Site و یا کپی کردن صفحات مربوط از سایتی بر اساس آن الگو امکان پذیر نمی باشد، می توانید همان نوع امنیت را در سایت خود و برنامه نویسی آن توسط خود شما، اجرا کنید. شما همان نوع صفحات را ایجاد می کنید – عضویت، ورود و غیره - و سپس از کمک کننده ها و گروه هایی برای برقراری عضویت استفاده می کنیدبیشتر کار به وسیله ی استفاده از روش های زیر و ویژگی های کمک کننده ی WebSecurity انجام می شود.

    • WebSecurty.UserExists, WebSecurity.CreateUserAndAccount. این روش به شما اجازه می دهد تعیین کنید که آیا فردی ثبت نام کرده و یا آن فرد را ثبت نام کنید.
    • WebSecurty.IsAuthenticated. این روش اجازه می دهد که تعیین کنید آیا یوزر حاضر وارد سیستم شده یا نه. اگر تقریبا وارد سیستم نشده باشید، این روش برای راهنمایی یوزر به صفحه ی ورود بسیار مفید می باشد.
    • WebSecurity.Login, WebSecurity.Logout. این روش ها یک یوزر را وارد سیستم کرده و یا از سیستم خارج می کنند.
    • WebSecurity.CurrentUserName. .این روش برای نمایش نام یوزر وارد شده مفید می باشد.
    • WebSecurity.ConfirmAccount. اگر شما تاییدیه ی ایمیل را برای ثبت نام برقرار کنید، این روش مفید خواهد بود.
     
  8. عضو جدید

    تاریخ عضویت:
    ‏25/9/21
    ارسال ها:
    12
    تشکر شده:
    3
    امتیاز دستاورد:
    3
    جنسیت:
    مرد
    حرفه:
    art
    ممنون از مطلبتون
    یه سوالی اینجا برام پیش اومده
    در کل اگه بخوایم این همه اقدام دستی برای امنیت سایت خودمون انجام بدیم
    بهتر نیست از فریم ورکهای PHP مثل لاراول استفاده کنیم
    که خیلی امکانات خوب و آماده ای رو در اختیارمون قرار میدند؟:مبهوت:
     
    بازدید اینستاگرام از این پست تشکر کرده است.