محدود کردن دسترسی از طریق IP کاربر با استفاده از فیلترها
دوشنبه 6 دی 1395گاهی اوقات ، در یک برنامه شما نیاز دارید که دسترسی به یک Action ِ یا Controller را از طریق IP کاربر ، محدود کنید . برای مثال ، شما محدودیتی برای پنل مدیریت سایت خود ایجاد میکنید که فقط از طریق IP شرکت شما قابل دسترسی باشد . در این مقاله به بررسی این ویژگی خواهیم پرداخت .
برای انجام این کار راه های گوناگونی وجود دارد . IIS امکان ، اعمال محدودیت با استفاده از IP را به شما میدهد ، اما در برنامه نویسی چگونه این را پیاده سازی میکند ؟
الگوریتم (سودو - کد) :
1. IP Address کاربر را بگیرید .
2. لیست IP Address های معتبر را بگیرید .
3. اگر IP کاربر در لیست IP ها میباشد ، آنرا به صفحه login یا هر صفحه ای که دوست دارید ارجاع دهید و در صورت معتبر نبودن و عدم وجود در لیست نیز کاربر را به یک صفحه هدایت کنید .
کار با Context of ASP.Net MVC ، قرار دادن این منطق در یک Action Filter سفارشی ، این ویژگی را در سرتاسر برنامه برای ما فراهم خواهد آورد ، و این ویژگی در تمامی Controller ها در دسترس ما خواهد بود .
فرض کنید که در حال کار کردن با یک برنامه MVC هستید ، یک کلاس جدید اضافه کنید که منطق Action filter ما در آن پیاده سازی میشود . ما این کلاس را در فولدری به نام Filters قرار میدهیم . برای این مثال ، ما یک کلاس با نام AuthorizeIPAddress.cs در فولدر Filters ایجاد میکنیم و کد های زیر را در آن مینویسیم :
using System; using System.Web; using System.Web.Mvc; using System.Configuration; namespace YourMVCApplication.Filters { /// <summary> /// Only allows authorized IP addresses access. /// </summary> public class AuthorizeIPAddressAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { //Get users IP Address string ipAddress = HttpContext.Current.Request.UserHostAddress; if (!IsIpAddressValid(ipAddress.Trim())) { //Send back a HTTP Status code of 403 Forbidden filterContext.Result = new HttpStatusCodeResult(403); } base.OnActionExecuting(filterContext); } /// <summary> /// Compares an IP address to list of valid IP addresses attempting to /// find a match /// </summary> /// <param name="ipAddress">String representation of a valid IP Address</param> /// <returns></returns> public static bool IsIpAddressValid(string ipAddress) { //Split the users IP address into it's 4 octets (Assumes IPv4) string[] incomingOctets = ipAddress.Trim().Split(new char[] { '.' }); //Get the valid IP addresses from the web.config string addresses = Convert.ToString(ConfigurationManager.AppSettings["AuthorizeIPAddresses"]); //Store each valid IP address in a string array string[] validIpAddresses = addresses.Trim().Split(new char[] { ',' }); //Iterate through each valid IP address foreach (var validIpAddress in validIpAddresses) { //Return true if valid IP address matches the users if (validIpAddress.Trim() == ipAddress) { return true; } //Split the valid IP address into it's 4 octets string[] validOctets = validIpAddress.Trim().Split(new char[] { '.' }); bool matches = true; //Iterate through each octet for (int index = 0; index < validOctets.Length; index++) { //Skip if octet is an asterisk indicating an entire //subnet range is valid if (validOctets[index] != "*") { if (validOctets[index] != incomingOctets[index]) { matches = false; break; //Break out of loop } } } if (matches) { return true; } } //Found no matches return false; } } }
و کد زیر را در Web.Config قرار دهید :
<appsettings> <!-- IP addresses allowed to view IP Address Restricted portions of the website. An asterisk indicates an entire subnet is valid. --> <add value="::1, 127.0.0.1, 10.0.*.*, 79.88.44.33" key="AuthorizeIPAddresses" /> </appsettings>
حال شما به راحتی میتوانید از آن در Controller خود استفاده کنید :
[AuthorizeIPAddress]
مثالی از استفاده آن در Action Method را در زیر مشاهده میکنید :
[AuthorizeIPAddress] public ActionResult AdministratorLogin() { return View(); }
مثالی از استفاده در سطح Controller :
[AuthorizeIPAddress] public class AdministratorController : BaseController { ... }
آموزش asp.net mvc
- ASP.net MVC
- 3k بازدید
- 11 تشکر