问题描述
|
我想在请求中读取“ 0”头值的值。
我试过了
HttpContext.Current.Request.Headers[\"X-Forwarded-For\"].Split(new char[] { \',\' }).FirstOrDefault();
在C#中。
还是我需要将标头除以\":\"
,然后取第二个字符串?
我问这个是因为,维基百科说
该字段的一般格式为:
X-Forwarded-For:客户端1,代理1,代理2
解决方法
您返回的格式为client1,proxy1,proxy2
因此,您用逗号将其分割,并首先看到您的客户端的IP。
, 如果有帮助,考虑到X_FORWARDED_FOR标头,这是获取用户IP地址的简单方法
var forwardedFor = Request.ServerVariables[\"HTTP_X_FORWARDED_FOR\"];
var userIpAddress = String.IsNullOrWhiteSpace(forwardedFor) ?
Request.ServerVariables[\"REMOTE_ADDR\"] : forwardedFor.Split(\',\').Select(s => s.Trim()).FirstOrDefault();
, 不要忘记X-Forwarded-For可以包含客户端在此处编写的任何内容。它可以在内部包含XSS或SQL注入。
, 有时前者可能包含一个无用的本地(专用)保留地址。同样,第一个位置也可以进行欺骗。
更新-2018年4月:对第一个地址为本地(私有)的实时生产网站进行抽样调查表明最终用户的网络或其ISP上存在一些配置问题。对于相同的最终用户,这种情况很少发生(<1%),并且始终如一。
下面的答案建议从右到左走,直到您到达一个公共地址。不确定是否有人这样做,但是指出了问题所在。
https://husobee.github.io/golang/ip-address/2015/12/17/remote-ip-go.html