Страница ASP.net разрешает выполнение только на сервере? - PullRequest
2 голосов
/ 25 октября 2011

У меня есть страница asp.net (c #), которую я выполняю ежедневно.

Я хотел бы знать, есть ли способ разрешить его выполнение только тогда, когда его запрашивает тот же ip, что исервер.Это означает, что если другой ip запустит страницу, ничего не произойдет или он будет перенаправлен.

Ответы [ 5 ]

7 голосов
/ 25 октября 2011

Вы можете использовать Request.IsLocal, чтобы проверить, является ли запрос локальным.

2 голосов
/ 25 октября 2011

Работает также с более низким уровнем, чем 2.0 (но HttpRequest.IsLocal предпочтительнее, если доступно).

C #

public static void redirectIfNotServer(string redirectUrl)
{
    // Look for a proxy address first
    var IP = HttpContext.Current.Request.ServerVariables("HTTP_X_FORWARDED_FOR");
    //Trim and lowercase IP if not null
    if ((IP != null)) {
        IP = IP.ToLower().Trim;
    }
    if (IP == null || (IP.Equals("unknown"))) {
        //If IP is null use different detection method, else pull the correct IP from list.
        IP = HttpContext.Current.Request.ServerVariables("REMOTE_ADDR").ToLower().Trim();
    }

    List<string> IPs = null;
    if (IP.IndexOf(",") > -1) {
        IPs = IP.Split(',').ToList();
    } else {
        IPs = new string[] { IP }.ToList();
    }

    var serverIP = HttpContext.Current.Request.ServerVariables("LOCAL_ADDR");
    var ipIsServerIp = (from ipAddress in IP swhere ipAddress == serverIP).Any();
    if (!ipIsServerIp) {
        HttpContext.Current.Response.Redirect(redirectUrl);
    }
}

VB.NET

Public Shared Sub redirectIfNotServer(ByVal redirectUrl As String)
    ' Look for a proxy address first
    Dim IP = HttpContext.Current.Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    'Trim and lowercase IP if not null
    If Not IP Is Nothing Then
        IP = IP.ToLower().Trim
    End If
    If IP Is Nothing OrElse (IP.Equals("unknown")) Then
        'If IP is null use different detection method, else pull the correct IP from list.
        IP = HttpContext.Current.Request.ServerVariables("REMOTE_ADDR").ToLower().Trim
    End If

    Dim IPs As List(Of String)
    If IP.IndexOf(",") > -1 Then
        IPs = IP.Split(","c).ToList
    Else
        IPs = New String() {IP}.ToList
    End If

    Dim serverIP = HttpContext.Current.Request.ServerVariables("LOCAL_ADDR")
    Dim ipIsServerIp = (From ipAddress In IPs Where ipAddress = serverIP).Any
    If Not ipIsServerIp Then
        HttpContext.Current.Response.Redirect(redirectUrl)
    End If
End Sub
2 голосов
/ 25 октября 2011

Вы можете запросить IsLocal свойство HttpRequest

http://msdn.microsoft.com/en-us/library/system.web.httprequest.islocal.aspx

1 голос
/ 25 октября 2011

Используйте свойство UserHostAddress объекта HttpRequest для получения адреса пользователя.

Используйте переменную LOCAL_ADDR со свойством ServerVariables , чтобы получить адрес сервера из объекта запроса.

Фернандо имеет лучшее решение, проверив свойство IsLocal .

1 голос
/ 25 октября 2011

Это:

Request.ServerVariables["REMOTE_ADDR"] 

даст вам удаленный IP-адрес, затем сравните его с IP-адресом вашего сервера или "localhost"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...