为了账号安全,请及时绑定邮箱和手机立即绑定

如下图,是我测试的一段代码访问一个IP查询服务的服务,可以看出,可以任何伪造ip地址!

如下图,是我测试的一段代码访问一个IP查询服务的服务,可以看出,可以任何伪造ip地址!

PHP
小怪兽爱吃肉 2023-04-08 14:10:54
当前正在做的一个PHP项目,需要验证用户的IP地址是否在授权范围中,请问有什么方法可以避免用户伪造IP?或者,是否能提供一个其他思路?补充:实际场景为rest调用,调用和被调用端都为服务器~
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

提供几个思路:

  1. 如果是局域网环境,那么建议你从系统上,甚至路由器上去限制IP

  2. 如果是公开的,伪造IP将无法收到你的Response,也就是说这个Response会发到那个被伪造的IP去。所以,除非是对你做泛洪攻击,伪造IP没有意义。

再说你评论的那个方案,其实是一种验证的手段,我倒是觉得,这种手段和对称加密没什么两样,当然对称加密成本要比你说的握手方式成本低很多。

总之,限制IP是为了做访问限制,而为了数据安全,还是要做加密和身份验证,对称加密是个好办法(对称加密中加入时间等元素,安全性一般比较高)。


查看完整回答
反对 回复 2023-04-11
?
绝地无双

TA贡献1946条经验 获得超4个赞

"HTTP_" 开头的$_SERVER很容易伪造.

服务段判断还是挺容易的. 其实下面这个代码也是判断是否使用proxy.

<?php
    if (       $_SERVER['HTTP_X_FORWARDED_FOR']
       || $_SERVER['HTTP_X_FORWARDED']
       || $_SERVER['HTTP_FORWARDED_FOR']
       || $_SERVER['HTTP_CLIENT_IP']
       || $_SERVER['HTTP_VIA']
       || in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554)))
       || @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 30))
    {         
    echo "we caught you";
    } ?>

结论:服务段最好只取$_SERVER['REMOTE_ADDR']


查看完整回答
反对 回复 2023-04-11
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

"X-FORWARDED-FOR" 是代理服务器通过 HTTP Headers 提供的客户端IP。代理服务器可以伪造任何IP。

要防止伪造,不要读这个IP即可(同时告诉用户不要用HTTP 代理)。

如果是PHP,$_SERVER['REMOTE_ADDR'] 就是跟你服务器直接连接的IP,用这个就可以了。


查看完整回答
反对 回复 2023-04-11
  • 3 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信