gpt4 book ai didi

php - 关于 [HTTP_X_FORWARDED_FOR] 的安全问题,我是否应该使用它而不是 [REMOTE_ADDR]?

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:46 25 4
gpt4 key购买 nike

我正在尝试创建一个 php 计数器,为了不计算同一访客的重复访问,我一直在考虑 saving the visitor's IP address into the database , 我应该转向 $_SERVER

我读过这个sample funtion by @Dusza这看起来不错而且方便:

<?php
function get_IP() {

// ADDRESS IP
if (getenv('HTTP_CLIENT_IP')) $ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR')) $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED')) $ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR')) $ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED')) $ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR')) $ipaddress = getenv('REMOTE_ADDR');
else $ipaddress = 'UNKNOWN';
//return $ipaddress;
}
?>

但我已经完成了some research here , 并发现其中存在一个安全漏洞,因为用户可以欺骗除 REMOTE_ADDR 之外的所有值,该值可以由代理修改。

所以我猜当他们说存在安全漏洞时,这意味着我应该在将用户输入插入数据库进行一些绑定(bind)时清理用户的输入。

还有其他注意事项吗?

鉴于所有其他值都不可靠,我应该完全避免使用它们吗?

但是 REMOTE_ADDR 的非欺骗性值呢?这可以由代理修改。

对我应该走哪条路有什么建议吗?

If you want to downvote, or vote the question to be closed or deleted, please leave me a comment about why, so I can improve my questions. Thanks.

最佳答案

REMOTE_ADDR 是通过 3 次 TCP/IP 握手建立的 IP 地址。这是响应将发回的 IP。这是您的服务器唯一验证过的内容。其他一切只是 任何人 可以设置的任意 HTTP header 。

现在,如果您知道您的服务器在代理(例如负载均衡器)后面运行,代理会屏蔽访问者的 IP 地址(您的服务器只会看到代理的 IP),但是您知道代理正在帮助您在 HTTP header 中转发访问者的 IP(作为这种情况的解决方法,因此您的服务器仍然可以看到访问者的 IP),然后并且只有那时可能您使用这些 HTTP header 之一,并且只使用您知道代理正在设置的那个。 如果您的服务器不在代理后面,请专门使用 REMOTE_ADDR。否则,请查阅您的代理手册并根据情况实现。

network diagram

关于php - 关于 [HTTP_X_FORWARDED_FOR] 的安全问题,我是否应该使用它而不是 [REMOTE_ADDR]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50468293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com