2012-05-06 5 views
1
CREATE TABLE `banned_ip` (
    `id` INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    `ip` VARCHAR(25) NOT NULL , 
    `reason` TEXT NOT NULL) 

Config.php에php와 mysql을 사용하여 효율적으로 IP를 금지 하시겠습니까?

<?php 
// config 
$config['host'] = "localhost"; // host name of your mysql server 
$config['user'] = "username"; // your mysql username 
$config['pass'] = "password"; // your mysql password 
$config['db'] = "database"; // the database your table is in. 

// the @ sign is an error supressor, meaning we can use our own error messages, this connects and selects db 
@mysql_connect("$config[host]","$config[user]","$config[pass]") 
    or die("There was an error connecting to the database, MySql said:<br />".mysql_error().""); 
@mysql_select_db("$config[db]") 
    or die("There was an error connecting to the database, MySql said:<br />".mysql_error().""); 
?> 

Ban.php

<?php 
include("connect.php"); 
$ip = $_SERVER['REMOTE_ADDR']; 
$find_ip = mysql_query("SELECT * FROM banned_ip WHERE ip='$ip'"); 
$ban = mysql_fetch_array($find_ip); 
if($ip == $ban['ip']){ 
    die("You are banned from this site!"); 
else { 
    echo "Your Were not Banned"; 
    $sql = "INSERT INTO user(ip) VALUES('$ip')"; 
} 
?> 

내가 뭐하는 거지 것은이 금지하거나되지 않으면 IP에 대한 내 데이터베이스를 확인합니다. 금지되지 않은 경우, 그에게 "너의 금지되지 않았다"라는 메시지를 보여주고 그를 금지시킨다.

데이터베이스에 IP 저장. 그리고 그가 현장에 다시 오면, "당신은이 사이트에서 금지되었습니다!"라고 표시됩니다.

이렇게하면 각 IP에 내 콘텐츠에 한 번만 액세스 할 수 있습니다. 이 스크립트가 효과가 있습니까? 이 스크립트는 나를 위해 작동하지 않습니다. 내 IP를 금지하는 것이 아니라 내 콘텐츠를 계속 보여줍니다.

+2

IP로 금지하지 마십시오. 그렇게하면 일반적으로 NAT 또는 아웃 바운드 방화벽 뒤에있는 학교, 회사 또는 홈 네트워크의 모든 사용자가 차단 될 때 차단됩니다. –

+1

반복적 인 악용 또는 금지 회피가 감지 된 경우에만 IP로 금지하지 마십시오. – Tibor

+0

완전히 신뢰할 수있는 방법은 아니지만 user-agent를 IP와 결합하여 조금 좁힐 수 있습니다. 선택한 모든 방법은 사용자 계정을 완전히 금지하지 않는 한 교활한 사용자가 우회 할 수 있습니다. –

답변

2

분명히 다른 테이블을 사용하고 있습니다. IP가 금지되었는지 확인하기 위해 banned_ip에 대한 select 쿼리를 수행합니다. 그러나 그가 금지되지 않은 경우 사용자 테이블에 삽입하려고 시도합니다. 이렇게하면 금지 된 모든 IP를 적어 두지 만 선택할 수는 없습니다.

또한 데이터베이스를 쿼리 할 때 SELECT *를 수행하는 것은 좋지 않습니다. 필요한 값만 선택하십시오 (이 경우 ip의 행을 찾았는지 확인하기 때문에 어떤 것이 든 상관 없습니다).

로그인하지 않은 사용자가 콘텐츠에 액세스하지 못하도록하는 100 % 확실한 방법은 없습니다. 당신이 지적 재산권을 금지한다면, 한 번에 여러 명을 (학교와 같이) 금지 할 수 있습니다. 쿠키 (및 세션) 사용은 쿠키가 삭제 될 수 있기 때문에 충분히 효율적이지 않습니다.

<?php 
include("connect.php"); 
$ip = $_SERVER['REMOTE_ADDR']; 
$find_ip = mysql_query("SELECT ip FROM banned_ip WHERE ip='$ip'"); 
$ban = mysql_fetch_array($find_ip); 
if($ip == $ban['ip']){ 
    die("You are banned from this site!"); 
else { 
    echo "Your Were not Banned"; 
    $sql = "INSERT INTO banned_ip (ip) VALUES('$ip')"; 
} 
?> 
+1

이것은 코드를 요구하는 측면이 아니기 때문에 사람들이 당신을 위해 일하기 시작합니다. 이 코드가 작동하도록 데이터베이스를 설정해야한다는 것을 알고 있습니까? 해당 테이블이 없으면 ips를 마술처럼 금지하지 않습니다. – Ahatius

+0

지적 해 주셔서 고맙습니다. 귀하의 답변을 이해할 수 없습니다. 도움을 주셔서 감사합니다 –

+0

내 대답이 업데이트되었습니다. 데이터베이스가 실제로 어떻게 보이는지 모르기 때문에 이것은 단지 추측 일뿐입니다. – Ahatius

관련 문제