读取X-Forwarded-For标题

Kut*_*ith 19 c# asp.net

我想读取X-Forwarded-For请求中标头值的值.

我试过了

HttpContext.Current.Request.Headers["X-Forwarded-For"].Split(new char[] { ',' }).FirstOrDefault();  
Run Code Online (Sandbox Code Playgroud)

在C#中.

或者我需要拆分标头":"并取第二个字符串吗?维基百科说,我这是在问这个问题

该字段的一般格式为:X-Forwarded-For:client1,proxy1,proxy2

Ari*_*tos 18

您获得的格式是client1,proxy1,proxy2

所以你用逗号分开它,然后第一个看到你的客户端的ip.

  • 这个建议是危险的,特别是如果用于访问控制。发起客户端还可以在其请求中添加 X-Forwarded-For 标头,然后通常在其中插入内部 IP 地址。谷歌“X-Forwarded-For hack”。您必须向后工作并断言每个地址都是您控制的代理。当您遇到不知道的IP地址时,您可以使用它作为客户端地址。这样,如果黑客使用 IP 地址(可能是您认为是网络内部的 IP 地址)开始列表,您将不会信任该地址。 (4认同)
  • @stolsvik我认为你无论如何都不能使用ip进行访问控制。IP 用于统计,并用于检查不良行为(如果可能)。 (2认同)

Cai*_*ete 9

如果有帮助,考虑到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();
Run Code Online (Sandbox Code Playgroud)


小智 7

不要忘记 X-Forwarded-For 可以包含客户端写入的任何内容。它内部可以包含 XSS 或 SQL 注入。