sim*_*mon 31 php logging web-services ip-address
我开发了一个PHP Web服务.我想记录使用此Web服务的WS客户端的所有传入连接.如何获取客户端的IP地址?的价值
$_SERVER['HTTP_CLIENT_IP']
Run Code Online (Sandbox Code Playgroud)
好像总是空着的.
Tom*_*igh 50
这应该是你想要的:
$_SERVER['REMOTE_ADDR']
Run Code Online (Sandbox Code Playgroud)
用户正在查看当前页面的IP地址.
http://php.net/manual/en/reserved.variables.server.php
bgc*_*ode 24
实际上,我建议使用此功能来涵盖所有基础,例如使用代理,共享网络等的人:
function getUserIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //if from shared
{
return $_SERVER['HTTP_CLIENT_IP'];
}
else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //if from a proxy
{
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
return $_SERVER['REMOTE_ADDR'];
}
}
Run Code Online (Sandbox Code Playgroud)
确保不要信任从客户端发送的数据.$_SERVER['REMOTE_ADDR']
包含连接方的真实IP地址.这是您可以找到的最可靠的价值.
但是,它们可能位于代理服务器后面,在这种情况下代理可能已经设置了$_SERVER['HTTP_X_FORWARDED_FOR']
,但这个值很容易被欺骗.它可以由没有代理的人设置为用户想要的任何值,或者IP可以是来自代理后面的LAN的内部IP.
这意味着如果要保存$_SERVER['HTTP_X_FORWARDED_FOR']
,请确保也保存该$_SERVER['REMOTE_ADDR']
值,例如,将两个值保存在数据库的不同字段中.
如果要将IP保存为数据库作为字符串,请确保至少有45个字符的空间.IPv6将保留,并且这些地址大于旧的IPv4地址.
小智 5
函数getUserIpAddr()和getRealIpAddr()不可靠!
唯一可靠的IP来自于$ip = $_SERVER["REMOTE_ADDR"];
其他任何人都可以通过发送CLIENT_IP标头伪造他的IP地址.
这个Firefox插件可以帮助您发送自定义标头.将CLIENT_IP = xxxx标头发送到运行此页面上任何功能的服务器,意味着客户可以选择他们想要的任何IP ...
归档时间: |
|
查看次数: |
11969 次 |
最近记录: |