محدود کردن دسترسی از طریق 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 تشکر