2010-01-02 86 views
1

我可以依赖请求者的IP通过所有Web请求吗?是否所有的Web请求都包含请求者的IP?

我有一个asp.net应用程序,我想使用IP来识别未经身份验证的访问者。我并不在乎知识产权是否独一无二,只要存在某些事情,这样我就不会得到空值。

如果不是,我想我将不得不处理值为空的情况。

还是比IP有更好的标识符?

+3

“我想使用IP来识别未经验证的访问者。” - 如果内部网上有100台使用相同外部IP的计算机,该怎么办? – Ally 2010-01-02 21:52:33

+0

你在这里工作的技术是什么?那里有许多认证框架。 – 2010-01-02 22:00:16

+0

你不能使用cookies? – jbochi 2010-01-02 22:02:50

回答

3

您可以从Request.ServerVariables["REMOTE_ADDR"]得到这个ASP/VBScript中。

它不会伤害到防御。如果你担心在没有设置的情况下出现一些可怕的错误情况,请检查该情况并相应处理。

可能有很多原因使这个值没有用。您只能获得最后一跳的地址,例如本地网络上的负载均衡器或SSL解码器。它可能是一个ISP代理或一些公司的NAT防火墙。

在此说明中,某些代理可能会提供IP地址,以便在额外的HTTP标头中转发流量,可通过 Request.ServerVariables["HTTP_X_FORWARDED_FOR"]访问。您可能需要先检查这个,然后回到Request.ServerVariables["REMOTE_ADDR"]Request.UserHostAddress

把这些东西记录下来以供参考/审核当然不是一个坏主意。

+0

+1,你可以用REMOTE_ADDR添加问题列表,当IPV6被使用时它会变得有点时髦。 – AnthonyWJones 2010-01-03 15:34:49

1

那么,web请求是一个http连接,它是一个tcp连接,所有tcp连接都有两个端点。所以它一直存在。但这与你所知有关。它既不独特也不可靠(包括所有的代理和东西)。

2

我相信这个值是由您的网络服务器设置的,并且实际上没有办法伪造它,因为如果您将对其他IP地址设置为IP,您的响应请求将无法返回给它们。

你应该担心的唯一事情就是代理。来自代理的每个人都将获得相同的IP。

0

IP地址用于识别用户的用处不大。如前所述,企业代理和其他专用网络可以显示为单个IP地址。

您如何验证用户?通常你会让他们登录,然后在你的应用程序的会话中存储该状态。

2

除非您的网络服务器正在监听某种非IP网络的网络,否则您将始终获得IP地址。但IP地址不一定是每个用户唯一的。

1

是的,每个请求必须有一个IP地址,但如上所述,一些ISP的使用代理,NAT或网关可能不会给你个人的计算机。 。

您可以轻松地得到这个IP(在C#)有:

串IP = Context.Request.ServerVariables [ “REMOTE_ADDR”]的ToString();

或与

IP = request.servervariables( “REMOTE_ADDR”)

相关问题