2017-06-12 9 views
0

IPアドレスを禁止して、ユーザーがウェブサイトにアクセスするのをブロックします。 IPアドレスを禁止するこのコードがあります。私は、データベース内の区切りカンマた場合PHPがIPアドレスを禁止してユーザーのウェブサイトへのアクセスをブロックします

$deny = array("111.111.111", "222.222.222", "333.333.333"); 
if(in_array ($_SERVER['REMOTE_ADDR'], $deny)){ 
    die("Your IP has been banned from accessing the website"); 
} 

今は簡単にデータをフェッチし、それを爆発することによってこれをコードすることができます。しかし私はそれをすべての行に1つのIPとして保存しました。ここでどうすれば確認できますか?

+0

Apacheを使用している場合、 '.htaccess'ファイルはIPブロックをもっと簡単に行うことができます:http://www.htaccess-guide.com/deny-visitors-by-ip-address/ –

+0

また、これをお読みください$ _SERVER'値を偽装する:https://stackoverflow.com/questions/5092563/how-to-fake-serverremote-addr-variable –

+0

DBに1行あたり1つのIPがある場合、なぜin_arrayを使用したいのですか?選択して、$ _SERVER ['REMOTE_ADDR']がban_listテーブルに存在するかどうかを確認できませんか? – GullDe

答えて

-1

$ _SERVER [REMOTE_ADDR]でIPアドレスを取得し、次にgroup_concat句を使用してテーブルからデータを取得できます.IPアドレスが配列に存在する場合は、アクセス許可をブロックします。

$query = "select group_concat('ipaddress') bannedAddress from iptable limit 0,1"; 
$result = mysql_fetch_array(mysql_query($query)); 


if(in_array ($_SERVER['REMOTE_ADDR'], $result[0]['bannedAddress'])){ 
    die("Your IP has been banned from accessing the website"); 
} 
+0

なぜあなたはそれらを取り戻すために行を結合するだけですか?結果の複数の行をループして配列に追加するだけではいかがですか。または、where節を使用し、count(*) 'WHERE ip =:ipaddress'のみを選択してください。 –

2

これを達成するために配列やループなどは必要ありません。あなたのテーブルからIPアドレスを選んでみてください。それが存在しない場合は、IPが禁止されていないことを知っています。

あなたは(このように、そのテーブルからすべての行を選択し、配列にそれを押すことで、ここで私はmysqliのを使用していますが、それは同様に、通常のMySQLで動作することを行うことができます
<?php 
    $ip = $_SERVER['REMOTE_ADDR']; 
    $sql = "SELECT * FROM banned_ips WHERE ip_address = '$ip'"; 
    $result = $conn->query($sql); 

    if ($result->num_rows > 0) { 
     die("Your IP has been banned from accessing the website"); 
    } 
?> 
-1

。あなただけ変更する必要があります小さなビットをコード):

$deny = array(); 
$sql = "SELECT * FROM `banned_addresses`"; 
$result = $mysqli->query($sql); 

while ($row = $result->fetch_assoc()) { 
    array_push($deny, $row["address"]; 
} 

if(in_array ($_SERVER['REMOTE_ADDR'], $deny)) { 
    die("Your IP has been banned from accessing the website"); 
} 

しかし、IPを禁止する良い方法があります。たとえば、そのIPアドレスのエントリがテーブルに存在するかどうかだけを確認できます。これははるかに高速です:

$sql = "SELECT * FROM `banned_addresses`"; 
$result = $mysqli->query($sql); 

if(mysql_fetch_array($result) !== false) { 
    die("Your IP has been banned from accessing the website"); 
} 

多くのサーバーでは、IPアドレスを直接禁止する方法もあります。 Apacheの場合、thisガイドがあります。

+1

これはコストがかかる可能性があります。 ALL IPを取得する代わりに、WHERE句を使用してデータベースに存在するかどうかを検索することができます。 – Ibu

関連する問題