【问题标题】:jsp get ip addressjsp获取ip地址
【发布时间】:2009-04-05 11:27:02
【问题描述】:

防止某人两次投票的最佳方法是什么?我如何获得用户的IP地址?如果他们在大型网络上怎么办?该网络上的每个人都会显示相同的IP吗?谢谢


更新:request.getRemoteAddr() 和 request.getRemoteHost() 返回服务器名称,而不是客户端的主机名和 ip。其他人有什么好主意吗?


好的,让我们忘记两次投票的事情吧。我只是想获取用户的IP地址?我尝试了 request.getRemoteAddr() 和 request.getRemoteHost() 并认为我正在获取服务器地址。我可以访问两个不同的网络并且获得相同的 IP 地址:(

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    在您的 JSP 中,使用 request.getRemoteAddr()。这将返回作为字符串发送请求的代理的 IP 地址。

    此外,request.getRemoteHost() 将尝试获取完全限定的主机名。但是,如果它无法解析名称,IP 地址将在 getRemoteAddr() 中返回。

    【讨论】:

      【解决方案2】:

      如果用户在NAT routerproxy server 后面,您将看到他们使用相同的IP 地址。因此,这并不是让用户投票一次的最佳方式。

      另一种方法是使用cookies,但同样可以删除 cookie 并再次投票。

      【讨论】:

        【解决方案3】:

        AFAIK 防止第二次投票的唯一方法是进行身份验证。显然这并不总是可行的,因此您必须降低单个用户投大量票的可能性。

        • 按源 IP 限制投票。使用getRemoteAddr() 允许,比如说……每小时投票一次?……每分钟? ...这将取决于您期望获得多少投票。根据经验调整数量。
        • 在每个投票投票的回复中设置cookie,投票结束后过期。
        • 通过检查和验证 RefererUser-Agent 等标头来提高伪造请求的难度。

        【讨论】:

          【解决方案4】:

          要获取路由器/防火墙后面的客户端 IP,您可以使用 request.getHeader("X-FORWARDED-FOR").

          X-Forwarded-For (XFF) HTTP 标头 是一个事实上的识别标准 客户端的原始 IP 地址 通过连接到 Web 服务器 HTTP 代理或负载平衡器。 http://en.wikipedia.org/wiki/X-Forwarded-For

          但请记住,此值可以由您和客户之间的代理更改。虽然它应该是正确的 IP。

          【讨论】:

            【解决方案5】:

            您可以通过 request.getRemoteAddr() 获取 IP 地址。如果网络使用的是 NAT 路由器,那么所有用户都将获得相同的地址

            【讨论】:

              【解决方案6】:

              在您的 JSP 页面中只需使用以下表达式:${pageContext.request.remoteAddr}

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2010-11-04
                • 1970-01-01
                • 2011-10-11
                • 1970-01-01
                • 2013-01-16
                • 2011-02-07
                • 2011-08-06
                • 2014-02-18
                相关资源
                最近更新 更多