2

一部のホスト名と IP が自分の Web サイトにアクセスするのをブロックしたいので、このコードを使用して 1 つのホスト名または IP のみをブロックします。

<?php
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$ipz = $_SERVER['REMOTE_ADDR'];
if ($hostname === "blocked hostname" || $ipz == "blokced ip" ){
echo "redirect to some url";
}
else {
echo "show site content";
}
?>

しかし、ブロックするホスト名と IP の長いリストがあります。これらの悪い IP とホスト名をすべて別のファイルに追加し、訪問者のホスト名または IP がそのリストにあるかどうかを確認します。どうすればそれを行い、サイトの読み込みを高速に保つことができますか?

ありがとう

4

2 に答える 2

2

最初の方法では、すべての IP を改行で区切って単一のファイルに入れます。次に、次のことを行います。

$ips = file("ips.txt", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
if (in_array($hostname, $ips) || (in_array($ipz, $ips)) {
  // redirect to some content for banned guyz
  die();
}
// real things

file() フラグに関する詳細情報が必要な場合は、このを参照してください。

セキュリティ上の理由から、「ips.txt」ファイルを外部からアクセスできないフォルダーに入れることができます。

2 番目の方法では、すべての IP が格納されている SQL テーブルがあります。

require_once("config.php");
$dbh = new PDO("mysql:host={$host};dbname={$base}", $user, $password);
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$ipz = $_SERVER['REMOTE_ADDR'];
$sth = $dbh->prepare("select count(*) from banned_ips where ip IN (?, ?)");
$sth->execute(array($hostname, $ipz));
$count = $sth->fetchColumn();
if ($count > 0) {
    // do some stuffs with banned user
    die();
}
// do some stuffs with normal users
于 2012-09-15T14:27:01.937 に答える
-1

実は先週、この機能を自分のサイトの 1 つに実装したばかりです。IP列と理由列を含むMySQLテーブルがあるため、ユーザーはIPが禁止されている理由と、リストを編集/表示できる人を確認できます。

$query = 'SELECT * FROM banned_ips';
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
$bannedips = array($row['ip']);
};
$ip=$_SERVER['REMOTE_ADDR'];

if (in_array($ip, $bannedips))
{
header('Location: some url');
};
于 2012-09-15T14:09:56.400 に答える