信任$ _SERVER ['REMOTE_ADDR']是否安全?

Sil*_*ght 84 php security ip-address

信任是否安全$_SERVER['REMOTE_ADDR']?它可以通过更改请求的标题或类似的东西来代替吗?

写这样的东西是否安全?

if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address
    $grant_all_admin_rights = true;
}
Run Code Online (Sandbox Code Playgroud)

sag*_*agi 103

是的,这很安全.它是TCP连接的源IP,不能通过更改HTTP标头来替换.

您可能需要担心的一种情况是,如果您在反向代理之后,在这种情况下,REMOTE_ADDR将始终是代理服务器的IP,并且用户IP将在HTTP标头中提供(例如X-Forwarded-For).但对于正常的用例,阅读REMOTE_ADDR很好.

  • @Addull IP欺骗只能以一种方式发送消息,你不能欺骗你的IP并得到消息作为回报. (5认同)
  • IP地址欺骗怎么样? (4认同)

phi*_*hag 56

$_SERVER['REMOTE_ADDR']是TCP连接的IP地址.虽然在技术上可以在互联网上双向欺骗IP地址(通过BGP宣布犯规路线),但这种攻击很可能被发现并且不可用于典型的攻击者 - 基本上,攻击者必须能够控制ISP或运营商.尚未对TCP进行可行的单向欺骗攻击(尚未).然而,双向IP欺骗在LAN上是微不足道的.

另请注意,它可能不是IPv4,而是IPv6地址.您当前的检查是在这方面的罚款,但如果你将检查1.2.3.4仅发生在任何地方$_SERVER['REMOTE_ADDR'],攻击者可以简单地从连接2001:1234:5678::1.2.3.4.

总之,对于除关键(银行/军事/潜在损害> 50.000€)应用程序之外的任何其他应用程序,如果您可以排除本地网络中的攻击者,则可以使用远程IP地址.

  • 您对互联网协议非常了解. (4认同)