У меня есть веб -приложение, которое может быть установлено в нескольких средах, в том числе на серверах, где оно может быть обнаружено через туннель с облаком. Я получаю исправленное значение ISLOCAL.internal class RequestSecurity
{
const string PROXY_CLOUDFLARE = "cloudflare";
const string PROXY_UNKNOWN = "proxy";
const string INTERNAL_LOCALHOST_IP = "::1";
private HttpRequest _request;
public string BaseIP { get => _request.UserHostAddress; }
public string ForwardedIP { get; internal set; }
public string ProxyType { get; internal set; }
public bool IsLocal { get => _request.IsLocal && ProxyType is null; }
public bool IsCloudFlared { get => ProxyType == PROXY_CLOUDFLARE && BaseIP == INTERNAL_LOCALHOST_IP; }
< /code>
} < /p>
public RequestSecurity(HttpRequest request)
{
_request = request;
// Check for Proxies.
var fromCloudFlare = request.Headers["cf-connecting-ip"];
var fromMiscProxy = request.Headers["x-forwarded-for"];
ProxyType =
!String.IsNullOrEmpty(fromCloudFlare) ? PROXY_CLOUDFLARE
: !String.IsNullOrEmpty(fromMiscProxy) ? PROXY_UNKNOWN
: null;
// Cloudflare is the outermost proxy, most likely closest to the client.
ForwardedIP = fromCloudFlare ?? fromMiscProxy;
}
}
< /code>
для использования класса просто вызовите следующим образом ... < /p>
if ((new RequestSecurity(Request)).IsLocal)
.. do local stuff ..
var requestSecurity = new RequestSecurity(_request);
if (requestSecurity.IsLocal)
.. do local stuff ..
Подробнее здесь: https://stackoverflow.com/questions/795 ... opposed-to
Надежно обнаруживает, является ли WebRequest из локального туннеля с облаком, а не непосредственно локальным ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение