我确实跟踪了用户的"真实"IP,如果他有一个代理发送真实IP的标头...是否有更好的解决方案,甚至更多的标头?
由于此函数在脚本中经常使用,因此它必须非常快,并且它似乎不在那个星座中:/
我提出了一些建议,但无法实现:
===
function get_real_ip()
{
$proxy_headers = array(
'CLIENT_IP',
'FORWARDED',
'FORWARDED_FOR',
'FORWARDED_FOR_IP',
'HTTP_CLIENT_IP',
'HTTP_FORWARDED',
'HTTP_FORWARDED_FOR',
'HTTP_FORWARDED_FOR_IP',
'HTTP_PC_REMOTE_ADDR',
'HTTP_PROXY_CONNECTION',
'HTTP_VIA',
'HTTP_X_FORWARDED',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_FORWARDED_FOR_IP',
'HTTP_X_IMFORWARDS',
'HTTP_XROXY_CONNECTION',
'VIA',
'X_FORWARDED',
'X_FORWARDED_FOR'
);
foreach($proxy_headers as $proxy_header)
{
if(isset($_SERVER[$proxy_header]) && preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/", $_SERVER[$proxy_header])) /* HEADER ist gesetzt und dies ist eine gültige IP */
{
return $_SERVER[$proxy_header];
}
else if(stristr(',', $_SERVER[$proxy_header]) !== FALSE) /* Behandle mehrere IPs in einer Anfrage(z.B.: X-Forwarded-For: client1, proxy1, proxy2) */
{
$proxy_header_temp = trim(array_shift(explode(',', $_SERVER[$proxy_header]))); /* Teile in …Run Code Online (Sandbox Code Playgroud) 我遇到一个问题,用户在通过脚本访问图像时遇到困难(使用cURL/ file_get_contents()):
使用file_get_contents()请求时,图像链接似乎返回403错误.但是在cURL中,返回了更详细的错误:
您被拒绝访问系统.如果您真的想要访问,请关闭引擎或Surf Proxy,假IP.代理或不接受任何Web工具入侵防御系统.
Binh Minh在线数据服务@ 2008 - 2012
在我自己摆弄cURL请求后,我也无法访问相同的图像.我尝试将用户代理更改为我可以成功访问映像的精确浏览器用户代理.我也尝试过我的个人本地服务器上的脚本,它显然使用与我的浏览器相同的IP地址......据我所知,用户代理和IP地址都不合适.
如何有人检测到执行请求的脚本?
顺便说一下,这不是什么疯狂的事情.我只是好奇的xD