限制访问特定国家/地区的 PHP 网站
Posted
技术标签:
【中文标题】限制访问特定国家/地区的 PHP 网站【英文标题】:PHP web site that restricted access to specific country 【发布时间】:2009-12-17 06:27:14 【问题描述】:既然 IP 可以被欺骗,那么如何构建一个能够正确识别访问者所在国家/地区的 php 网站?
【问题讨论】:
【参考方案1】:鉴于互联网的匿名性,这本质上是一个问题,但无论如何,通过欺骗 IP 地址来获取您所在国家/地区不合法提供的内容在技术上无论如何都是犯罪行为。
您应尽一切合理努力确保您的网站遵守媒体和信息的分发限制,但有些事情要防范是不切实际的。您最接近的方法是进行实际的实际地址验证,例如信用卡上的帐单地址或亲自邮寄某人的密码以进行注册,但这两种选择都会代表用户或您自己产生费用。
【讨论】:
【参考方案2】:Joomla一直在使用下面的函数来获取IP地址,这是一个非常通用的好函数,可以避免可能的作弊,你可以使用它:
function get_ip()
$ip = false;
if (!empty($_SERVER['HTTP_CLIENT_IP']))
$ip = $_SERVER['HTTP_CLIENT_IP'];
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
$ips = explode (', ', $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip != false)
array_unshift($ips,$ip);
$ip = false;
$count = count($ips);
# exclude IP addresses reserved for LANs
for ($i = 0; $i < $count; $i++)
if (!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i]))
$ip = $ips[$i];
break;
if (false == $ip AND isset($_SERVER['REMOTE_ADDR']))
$ip = $_SERVER['REMOTE_ADDR'];
return $ip;
【讨论】:
@Sarfraz,谢谢。我会试一试。不太确定正则表达式过滤掉了什么。 这段代码比使用代理更容易破解:只需将传出请求的标头设置为允许的 IP。不需要代理。这是众所周知的,例如在美国以外观看喜剧中心。 您可能是对的,但我们在使用该功能时没有发现 joomla 有任何问题。如果你看过一个,请告诉我们。谢谢 详细说明:这段代码是一个开始。您需要验证 AND REMOTE_ADDR 是否在您所在的国家/地区。 这是一个如何绕过上述代码的示例,非常具体:ohryan.ca/blog/2009/08/15/…以上是关于限制访问特定国家/地区的 PHP 网站的主要内容,如果未能解决你的问题,请参考以下文章