0

~$_SERVER['REMOTE_ADDR'~ がチェックする IP 範囲を拡張したいと考えています。以下は機能し、サイトへの 10.0.4.* サブネット アクセスのみを許可します。

$chk = "10.0.4.";
if( substr($_SERVER['REMOTE_ADDR'],0,strlen($chk)) !== $chk)
    $wgGroupPermissions['*']['read'] = false;

文字列を変更し$chkてローカル ネットワーク全体にサイトを開くと、サイトを全世界に開くことになります。

$chk = "10.0.";
if( substr($_SERVER['REMOTE_ADDR'],0,strlen($chk)) !== $chk)
    $wgGroupPermissions['*']['read'] = false;

ローカル サブネット 10.0.. だけにサイトへの読み取りアクセスを許可したい。どうすればいいですか?

4

3 に答える 3

1

マスクを使用することは、文字列を分割するよりも優れた方法です。

function testSubnet($ip, $subnet, $mask) {
    $ip = ip2long($ip);
    $subnet = ip2long($subnet);
    $mask = ip2long($mask);
    return ($ip & $mask) == ($subnet & $mask);
}

var_dump(testSubnet('10.0.0.1', '10.0.0.0', '255.255.255.0'));
var_dump(testSubnet('10.0.0.2', '10.0.0.0', '255.255.255.0'));
var_dump(testSubnet('10.0.1.1', '10.0.0.0', '255.255.255.0'));
var_dump(testSubnet('10.0.1.1', '10.0.0.0', '255.255.0.0'));

この場合:

if(testSubnet($_SERVER['REMOTE_ADDR'], '10.0.4.0', '255.255.255.0')) {
    // Anything, blablabla...
}
于 2012-09-12T01:50:47.300 に答える
0

なぜできないのですか:

$z = $_SERVER['REMOTE_ADDR'];

function check($ip, $octet = 2) {
    $allow = explode(".", "10.0.0.1");
    $ipa = explode(".", $ip);

    for($i = 0; $i < $octet; $i++) {
        $ch .= $ipa[$i];
        $ah .= $allow[$i];
    }

   return $ch == $ah;
 }

echo check($z);

$octet は、一致させたいオクテットの量です。デフォルトは 2 です。

于 2012-09-12T01:22:56.057 に答える
0

機能を使用できますheader()か?これを試して。

$allowed_ip = "10.0.4";
if (!strstr($_SERVER['REMOTE_ADDR'],$allowed_ip))
   header("Location: login.php");
   // include("login.php");

/* The user will be redirected to another page or you could
always include your login.php page and just continue from there. */
于 2012-09-12T01:27:15.820 に答える