Hej!
Är noll kunnig vad gäller kodning. Har sökt men inte hittat en ip-spärr. Vill blockera EN ip-adress och om det går, automatiskt skicka vederbörande till annan adress ...
:h
18 svar · 750 visningar · startad av mibbe
Hej!
Är noll kunnig vad gäller kodning. Har sökt men inte hittat en ip-spärr. Vill blockera EN ip-adress och om det går, automatiskt skicka vederbörande till annan adress ...
:h
Hm. Jag använder följande kod för att banna folk från min sida:
<?
// Try to get the correct remote IP-address.
function getRemoteAddress()
{
// If HTTP_X_FORWARDED_FOR is set we grab the first address in the list
if( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) )
{
if( preg_match( "/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/", $_SERVER['HTTP_X_FORWARDED_FOR'], $addresses ) )
return $addresses[0];
}
// If no address was found in HTTP_X_FORWARDED_FOR, we try HTTP_CLIENT_IP and if that isn't set we return REMOTE_ADDR
return (isset( $_SERVER['HTTP_CLIENT_IP'] )) ? $_SERVER['HTTP_CLIENT_IP'] : $_SERVER['REMOTE_ADDR'];
}
// Här lägger du till IP-adresser du vill banna
$banlist = array('xxx.xxx.xx.xxx', 'xxx.xxx.xx.xxx');
if( in_array( getRemoteAddress(), $banlist ) )
exit( '<h1>Portad</h1>
<p>Du är inte välkommen, gå här ifrån.</p>' );
?>
Det kanske går skriva om den där så man skickas till en annan sida i stället för att få meddelandet. :)
Om du inte skriver ut någonting före denna kod borde följande förändring av de tre sista raderna ovan skicka folk dit pepparn växer:
if( in_array( getRemoteAddress(), $banlist ) )
header ( 'Location: ht tp://w ww.ditpepparnVäxer.com' ); // ;-)
(Mellanslagen i http och www kom dit för att wF inte skulle ha hyss för sig med texten.)
silfver - Vad är skillnaden mellan de tre uttryck du använder i getRemoteAddress? :q
aasah skrev:
silfver - Vad är skillnaden mellan de tre uttryck du använder i getRemoteAddress? :q
Kan tyvärr inte svara på det. :( Inte jag som har gjort scriptet.
Nu skäms jag..men bäst att fråga och verka dum än att förbli okunnig. Sidan är en frame-sida. Lägger jag in den i indexfilen och i body eller i head? :r :r :r
Och jag antar att de ska se ut som nedan
<?
// Try to get the correct remote IP-address.
function getRemoteAddress()
{
// If HTTP_X_FORWARDED_FOR is set we grab the first address in the list
if( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) )
{
if( preg_match( "/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/", $_SERVER['HTTP_X_FORWARDED_FOR'], $addresses ) )
return $addresses[0];
}
// If no address was found in HTTP_X_FORWARDED_FOR, we try HTTP_CLIENT_IP and if that isn't set we return REMOTE_ADDR
return (isset( $_SERVER['HTTP_CLIENT_IP'] )) ? $_SERVER['HTTP_CLIENT_IP'] : $_SERVER['REMOTE_ADDR'];
}
// Här lägger du till IP-adresser du vill banna
$banlist = array('213.64.254.7', 'xxx.xxx.xxx.xx');
if( in_array( getRemoteAddress(), $banlist ) )
header ( 'Location: ht tp://www. mibbe.com/err or.php' );
?>
mibbe skrev:
Nu skäms jag..men bäst att fråga och verka dum än att förbli okunnig. Sidan är en frame-sida. Lägger jag in den i indexfilen och i body eller i head? :r :r :r
Lägg den allra överst på din sida, i head.php-filen.
Du lägger den i alla filer du vill skydda.
mibbe skrev:
...Och jag antar att de ska se ut som nedan...
Ja, (fast utan mellanslagen i url:en). :)
CLIENT_IP vet jag inte, men X_FORWARDED_FOR sätts av vissa proxies. Det är ju nämligen proxyns adress som kommer på REMOTE_ADDR.
silfver skrev:
Lägg den allra överst på din sida, i head.php-filen.
Head-php-filen?
Du menar i alla fall
<head>
<php-tjosan>
</head>
?? :r :r :r
aasah skrev:
Ja, (fast utan mellanslagen i url:en). :)
Ja, SÅ långt var jag med .... alltid något ... :r :e
mibbe - med tanke på att din error-sida inte upplyser om att det är banning som gäller... så ska du kanske inte posta avsedda ip-adresser här? :q Ägarna kanske får syn på dem och känner igen sina ip-nummer? :q Fast du kanske använde dummy-värden...
tydal skrev:
CLIENT_IP vet jag inte, men X_FORWARDED_FOR sätts av vissa proxies. Det är ju nämligen proxyns adress som kommer på REMOTE_ADDR.
Aha! Så X_FORWARDED_FOR kan vara/är ens egen ip-adress?
mibbe skrev:
silfver skrev:
Lägg den allra överst på din sida, i head.php-filen.
Head-php-filen?
Du menar i alla fall
<head>
<php-tjosan>
</head>?? :r :r :r
Ungefär. Lägg bara php-koden överst på den sida du vill porta folk ifrån. Alltså över all annan kod, även över <head>-taggen.
Är lite osäker på om det spelar någon roll, men det är väl bättre att vara på den säkra sidan så hinner personen inte ladda något av sidan.
silfver skrev:
... Är lite osäker på om det spelar någon roll, men det är väl bättre att vara på den säkra sidan så hinner personen inte ladda något av sidan.
Det spelar roll. "Redirecten" (via header(...) ) funkar inte om något tecken redan skickats till webbläsaren. Så lägg det som:
<?php
<koden du vill ha in>
?>
<html>
<head>
.....
aasah skrev:
mibbe - med tanke på att din error-sida inte upplyser om att det är banning som gäller... så ska du kanske inte posta avsedda ip-adresser här? :q Ägarna kanske får syn på dem och känner igen sina ip-nummer? :q Fast du kanske använde dummy-värden...
De som "äger" de ip-adresserna är garanterat INTE på webforum, det lovar jag :)
Sen som ni förstår så vill jag att vederbörande inte ens ska förstå att han är bannad (Därav den lilla gulliga error-sidan) :h
aasah skrev:
... Är lite osäker på om det spelar någon roll, men det är väl bättre att vara på den säkra sidan så hinner personen inte ladda något av sidan. Det spelar roll. "Redirecten" (via header(...) ) funkar inte om något tecken redan skickats till webbläsaren. Så lägg det som:
<?php <koden du vill ha in> ?> <html> <head> .....
Nu kan vederbörande inte komma in, men följande meddelande kommer upp ... (Har B-one, kanske spelar in?) Så huvuddelen av syfter är uppnått nu ...) =)
Warning: Cannot modify header information - headers already sent by (output started at /customers/mibbe.com/mibbe.com/httpd.www/index.php:2) in /customers/mibbe.com/mibbe.com/httpd.www/index.php on line 41
mibbe skrev:
aasah skrev:
... Är lite osäker på om det spelar någon roll, men det är väl bättre att vara på den säkra sidan så hinner personen inte ladda något av sidan. Det spelar roll. "Redirecten" (via header(...) ) funkar inte om något tecken redan skickats till webbläsaren. Så lägg det som:
<?php <koden du vill ha in> ?> <html> <head> ......... Warning: Cannot modify header information - headers already sent by (output started at /customers/mibbe.com/mibbe.com/httpd.www/index.php:2) in /customers/mibbe.com/mibbe.com/httpd.www/index.php on line 41
Det beror på att din kod INTE ligger överst i filen. Någonting "<html>", eller ett mellanslag eller vad som helst har skrivits ut till webbsidan före raden
header("Location: ....");
Att döma av felmeddelandet finns det någon form av output på rad 2 i index.php, medan header-raden befinner sig på rad 41.
Detta får till följd att de som har dessa ip-adresser INTE skickas iväg till någon ny sida, ty redirecten fungerar inte!!
Du kan testa hur det ser ut för dem genom att skapa en kontrollsida där du (temporärt) lägger in ditt eget ip bland de bannade tecknen.
För att redirecten ska fungera måste du se till att din kod ligger före varje tecken som skickas till webbläsaren.
aasah skrev:
För att redirecten ska fungera måste du se till att din kod ligger före varje tecken som skickas till webbläsaren.
Tack aasah som med en ängels tålamod hjälpt mig.
Tydligen så hade jag klistrat in ovanstående på rad 2 och neråt och det gick inte. Drog upp allt en rad och nu funkar det finemang.
Tack även silfver & Tydal som hjälpt mig med sin kunskap :bire