Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaServlet中是否可以准确地确定客户端的IP地址_Java_Authentication_Networking_Ip - Fatal编程技术网

在JavaServlet中是否可以准确地确定客户端的IP地址

在JavaServlet中是否可以准确地确定客户端的IP地址,java,authentication,networking,ip,Java,Authentication,Networking,Ip,我想在我的网络中配置一台机器,以便在没有身份验证的情况下接受来自特定机器的所有呼叫。为此,我计划使用客户端计算机的IP地址作为所需的信任因子,以允许未经检查的身份验证 我关心的是,是否有可能在Javaservlet中准确地确定客户机的IP地址?我在servlet中获得的IP是否有可能被某种黑客机制改变,使我的服务器相信它是可信的IP 例如,如果我的服务器机器被配置为信任192.168.0.1,那么除了192.168.0.1之外的其他客户端是否可以伪装成192.168.0.1并愚弄我的身份验证机制

我想在我的网络中配置一台机器,以便在没有身份验证的情况下接受来自特定机器的所有呼叫。为此,我计划使用客户端计算机的IP地址作为所需的信任因子,以允许未经检查的身份验证

我关心的是,是否有可能在Javaservlet中准确地确定客户机的IP地址?我在servlet中获得的IP是否有可能被某种黑客机制改变,使我的服务器相信它是可信的IP


例如,如果我的服务器机器被配置为信任192.168.0.1,那么除了192.168.0.1之外的其他客户端是否可以伪装成192.168.0.1并愚弄我的身份验证机制?

IP很容易被伪装成电子邮件发送者,我强烈建议不要完全依赖它们。

您可以使用
getRemoteAddr()
方法从
HttpServletRequest
类中获取IP地址。不过要小心。如果您的客户端位于代理服务器(甚至是NATting防火墙)后面,您将获得代理IP地址

因此,您还可以查找X-Forwarded-for HTTP头(用于标识HTTP代理后面的客户端的源IP地址的标准)。请参阅有关的详细信息。不过要小心。如果您的客户机不在代理后面,则可以获得空XFF头。所以,若要遵循这条路径,应该混合使用servlet方法和XFF头计算。但是,不能保证代理会将头转发给您


但是请注意,源IP地址很容易被任何恶意客户端更改或伪造。我真的建议使用某种客户端身份验证(例如证书)。web应用无法准确地确定客户端IP地址。

您的服务可能容易受到攻击。伪造似乎来自不同IP地址的数据包很容易。不过,关于欺骗,攻击者将无法接收任何响应数据包。因此,如果调用您的服务不会导致内部状态更改(即只读),那么您应该可以。但是,如果对您的服务的调用将发出写操作,那么您不应该仅仅依赖IP地址,因为伪造的数据包足以更改系统的内部状态。

您可以在本地访问。恶意机器说服路由器将IP地址与其MAC地址关联

信任的级别和机制实际上取决于您试图保护的服务器/服务以及您操作的环境的敏感性

在我看来,鉴于私有IP地址192.168的范围,这是一种本地安排。如果此服务器不是面向公众的,不是关键的,并且您在相对安全的LAN环境中运行,该环境与公共LAN和其他专用LAN完全隔离,那么您应该可以。否则,您应该在更高级别上查看其他安全选项

我关心的是,是否有可能在Javaservlet中准确地确定客户机的IP地址

不,这是不可能的。在许多情况下,由于用户的操作或其他用户无法控制的原因,您将看不到真实的客户端IP地址

在后一种情况下,基于IP的身份识别最终会让诚实的客户头疼;i、 e.你真正想要留住的客户


如果你真的需要限制访问特定的计算机集,你应该考虑使用类似于SSL/TLS的客户端证书作为你的第一道防线。描述了带有客户端证书的TLS。

当您回复指定的IP地址时,不像邮件发送者那样容易。所以真正的问题是在操作的情况下破坏源IP,但是在提供信息时可以依赖它们。是的,我对Stevelv的回答投了赞成票,因为他区分了写和只读。顺便说一句,邮件发送者是完全相同的,因为你不能在两种情况下都收到答案。这一点很好。我(还)没有花太多时间担心本地网络上的恶意用户,尽管这肯定会发生,而且是一个防范恶意用户的好主意。:)192.168 ip范围不会由任何公共路由器承载。因此,任何威胁都必须来自内部和+1,因为它们提到了XFF头并可能为空。客户端身份验证是如何工作的?客户端是否可以发送一个类似于服务器在https通信中发送的证书来识别自身,请提供一些详细信息。您可以生成一个自签名客户端证书,并将其安装到客户端计算机的密钥库中(您在客户端中也使用Java吗?)。然后,您的服务器应该只接受来自给定CA(在本例中是您自己)的客户端证书签名的请求。web上有大量关于Java+客户端证书的文档。此外,请看一下TLS的卓越基础。您能否提供一些方法,说明我如何实现所需的功能,即信任我网络中的机器。您可能想做的部分工作是确定可接受的风险水平与您必须锁定的周期数相平衡。如果你是一家银行,那么你需要确保它坚如磐石,但其他应用程序有更大的容忍度。一种选择是确保您不绑定在公共IP上,并信任您的系统管理员以保持本地“网络”锁定。如果您确实需要保护它,viccaris建议如果您需要锁定它,使用客户端证书是一个很好的方法。无论您做什么,如果您超越了IP验证,请确保您可以轻松地撤销访问。