2015-01-03 3 views
2

IP 주소 블록으로 보호하려는 페이지를 만들었습니다.IP 주소를 기반으로 방문자를 리디렉션

방문 주소가 example.com 인 사람은 누구나 IP 주소가 알려져 있지 않다면 example.com/block.php으로 리디렉션되어야합니다. 어딘가에 목록에 많은 IP 주소를 추가 할 수 있기를 원합니다. 누군가의 IP 주소를 목록에 추가 한 후 다시 example.com을 방문하면 example.com/index.php으로 리디렉션되어야합니다.

이것이 가능합니까? 나는 똑같은 모습의 많은 질문을 보았지만 내 질문에는 정말 답이 없습니다.

+0

이 문제는 사용자의 주소와 리디렉션을 식별하는 두 가지 문제로 분리하여 조사 할 수 있습니다. 당신은 둘 다에 대한 방대한 양의 예제를 찾을 수 있어야합니다. 또한 웹 서버 수준에서이 작업을 수행하는 것이 좋습니다. – fejese

답변

4

질문에 htaccess 태그가 있기 때문에 여러 가지 방법이 있습니다. htaccess 파일 솔루션을 찾고 있다고 가정합니다.

아파치 2.4 (또는 그 이상)를 사용하고 있지 않다면 mod_authz를 사용하여 모든 차단을 처리 할 수 ​​있습니다. 다음과 같은 내용 :

# this makes it so blocked IPs get shown the block.php page 
ErrorDocument 403 /block.php 

Order Allow,Deny 
Deny from all 

Allow from 1.2.3.4 
Allow from 1.2.3.5 
Allow from 5.6.7.8 

etc... 

여기에서는 모든 것을 차단하고 "허용"목록을 보관합니다. 전체 서브넷을 허용하려는 경우 단축 할 수 있습니다 (예 :

Allow from 1.2.3 

은 1.2.3으로 시작하는 IP를 허용합니다.

당신은이에 대한 mod_rewrite를 사용할 수 있습니다 :

RewriteEngine On 
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4$ 
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.5$ 
RewriteCond %{REMOTE_ADDR} !^5\.6\.7\.8$ 
RewriteRule^/block.php [L,F] 

를 여기, 당신은 IP와 일치하는 정규 표현식을 사용할 수 있기 때문에 좀 더 유연성을 가지고있다. 따라서 다음과 같은 작업을 수행 할 수 있습니다.

RewriteCond %{REMOTE_ADDR} !^1\.2\.[3-6]\. 

이렇게하면 1.2.3, 1.2.4, 1.2.5 및 1.2.6으로 시작하는 모든 IP가 허용됩니다.

이 지시어를 server/vhost 설정 파일에 넣을 수도 있습니다. htaccess 파일 대신에이 지시문을 조금 더 빠르게 사용할 수 있습니다.

+0

도와 주셔서 대단히 감사합니다. – Thomas

2

어때?

<?php 
$allowed = array(
    '123.45.67.890', 
    '456.45.67.890', 
    '789.45.67.890', 
); 

if(!in_array($_SERVER['REMOTE_ADDR'], $allowed)) { 
    header("Location: /block.php"); 
    exit(); 
} 

// continue with code ... 

?> 

희망!

+0

'index.php'에 넣어도 무한 리다이렉트가 발생합니다. 조건 로직을 반전시켜야 정상입니다. –

+0

물론 나는 스크립트가'index.php'에서 실행되고 있지 않다고 가정합니다. –

+0

하지만 그때 아무런 보호가 없습니다, lolz –

관련 문제