asp.net内核X-Forwarded-For和X-Forwarded-Proto之间的参数计数不匹配
问题描述:
CloudFlare
IIS ARR
Asp.net core 1.1.1
我背后是cloudflare,然后是iis arr。asp.net内核X-Forwarded-For和X-Forwarded-Proto之间的参数计数不匹配
CloudFlare的是HTTP only模式
我经常收到X - 转发,对于和 X转发 - 协议之间
参数数量不匹配。
我的启动文件
ForwardedHeadersOptions forwardOption = new ForwardedHeadersOptions
{
ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto,
ForwardLimit = 2
};
forwardOption.KnownProxies.Add(IPAddress.Parse("xxxxx"));
forwardOption.KnownProxies.Add(IPAddress.Parse("xxxxx"));
forwardOption.KnownProxies.Add(IPAddress.Parse("xxxxxx"));
forwardOption.KnownProxies.Add(IPAddress.Parse("xxxxxx"));
app.UseForwardedHeaders(forwardOption);
。我将在IIS ARR级我也有测试此重写规则HTTPS
HTTP_X_FORWARDED_PROTO
http
replace the existing value
什么问题?
这里是一个link,但没有任何帮助
答
我发现你configureservices
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.RequireHeaderSymmetry = false;
options.ForwardLimit = 2;
options.KnownProxies.Add(IPAddress.Parse("xxx.xxx.xxx.xxx"));
options.KnownProxies.Add(IPAddress.Parse("xxx.xxx.xxx.xxx"));
options.KnownProxies.Add(IPAddress.Parse("xxx.xxx.xxx.xxx"));
});
和您basecontroller或其他地方使用该代码得到真正的IP地址,如果一个解决方案只需添加以下代码你落后于cloudflare和arr
public string GetRealIpAddress()
{
StringValues connectionIp;
var conncetionIpAvailable = Request.Headers.TryGetValue("Cf-Connecting-Ip", out connectionIp);
if (conncetionIpAvailable)
{
return connectionIp.ToString().Trim();
}
else
{
var xForwardFor = Request.Headers.GetCommaSeparatedValues("X-Forwarded-For");
string ipList = "";
foreach (var x in xForwardFor)
{
ipList = ipList.Trim() + " , " + x.Trim();
}
if (!string.IsNullOrEmpty(ipList.Trim()))
{
return ipList.Trim();
}
else
{
return "xxx.xxx.xxx.xxx";
}
}
}
你有任何帮助吗? – Raskolnikoov