Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: IP-osoitteen esto

Sivun loppuun

Cc [06.12.2005 22:11:07]

#

Ajattelin vielä tehdä sivulleni ip-osoitteen eston osaan tehdä sen mutta ajattelin että voisin laittaa siihen vielä perään syyn sitä en taas osaa tehdä :D
koodini on tälläinen:

foreach(file('admin/ipt.txt') as $ip)
{
  if (trim($ip) == $_SERVER['REMOTE_ADDR'])
    exit('Sinun IP-osoitteesi on estetty tälle sivulle!');
}

Ja ipt.txt tiedostossa on tallennettu tälläin ipt ja syyt:

35.658.247.35|tässä on syy|

Antakaa neuvoja miten kannattaisia toimia älkää antako suoraa koodia (1.vastoin putkan sääntöjä 2. haluan oppia)

Metabolix [06.12.2005 22:15:32]

#

Tutustu Explode- tai Split-funktioon. Jälkimmäinen | on silloin turha. (PHP-manuskasta taikka Putkan kielihakemistosta löytyy.)

Cc [06.12.2005 22:36:54]

#

ok kiitos sinulle..

$file = file("admin/ipt.txt");
$i = 0;
foreach ($file as $i => $value) {
$tiedot = explode("|", $value);
if ($tiedot[0] == $_SERVER['REMOTE_ADDR']) {
echo 'Sinun IP-osoitteesi on estetty t&auml;lle sivulle!<br />Syy est&auml;miseen: ' . $tiedot[1];
die();
}
$i++;
}

sain tälläisen kehiteltyä mutta tässä on pieni ongelma se ei reagoit admin/ipt.txt ekalla rivillä sijaitsevaan ip:seen eli vaikka tiedostossa on se ip se ei ole bannatta :s

kayttaja-2791 [06.12.2005 23:16:55]

#

Mikä tuon muuttujan $i tarkoitus on? Foreach käy kaikki alkiot lävitse, et tarvitse mitään indeksimuuttujaa.

Eli koodin

if ($file = @file("admin/ipt.txt")) {
  foreach ($file as $value) {
    $tiedot = explode("|", $value);
    $ip = trim($tiedot[0]);
    $syy = trim($tiedot[1]);
    if ($ip == $_SERVER['REMOTE_ADDR'])
      exit("Sinun IP-osoitteesi on estetty t&auml;lle sivulle!<br />Syy est&auml;miseen: $syy";
  }
}

pitäisi kyllä mielestäni toimia.

tsuriga [06.12.2005 23:25:48]

#

Mitään ei tarvitse luultavastikaan trimmata, kun rivinvaihto on kolmannessa $tiedot indeksissä (eli $tiedot[2] = rivinvaihto).

Cc [06.12.2005 23:31:37]

#

tuokaan ei ota sitä ekaa riviä :s
EDIT: sain toimimaan.. kiitos...

ipe [07.12.2005 08:03:08]

#

Cc kirjoitti:

EDIT: sain toimimaan.. kiitos...

Olisi tietysti kohteliasta kertoa, että mikä oli vikana. Nimittäin sitten kun joku käyttää tuota putkan hakua ongelmissaan, niin tulee vain ketjuja joissa ei ole oikeaa ratkaisua :P

tsuriga [07.12.2005 10:48:35]

#

Tuossahan se jo ylempänä on, mutta laitetaan vielä väreillä.
Ratkaisu:

Bannaaminen IP:n perusteella

<?php

if (($file = file("admin/ipt.txt")) !== false) {
  foreach ($file as $value) {
    $data = explode("|", $value);
    if ($data[0] == $_SERVER['REMOTE_ADDR'])
      die ("One-way ticket to Banzorville for you, ".$data[0].". Reason: ".$data[1].".");
    } // foreach end
  } // if end

?>

Cc [07.12.2005 15:31:26]

#

ipe kirjoitti:

Cc kirjoitti:

EDIT: sain toimimaan.. kiitos...

Olisi tietysti kohteliasta kertoa, että mikä oli vikana. Nimittäin sitten kun joku käyttää tuota putkan hakua ongelmissaan, niin tulee vain ketjuja joissa ei ole oikeaa ratkaisua :P

Se .txt tiedosto jumitti jotain minulla kun poistin sen ja tein uudestaan niin toimii jälleen...

Blaze [07.12.2005 17:42:12]

#

JTS kirjoitti:

Mikä tuon muuttujan $i tarkoitus on? Foreach käy kaikki alkiot lävitse, et tarvitse mitään indeksimuuttujaa.

Jos taulukon arvoilla olisi avaimet (key), niin ne näkyisivät foreach-blokin sisällä tuossa $i-muuttujassa. file() -funktion palauttamassa niitä toki ei ole, jolloin tuo on täysin turha.

tsuriga [07.12.2005 22:17:45]

#

Onhan niillä avaimet, hankala niitä muuten olisi sieltä taulukosta muuten poimia ;).

kayttaja-2791 [08.12.2005 16:39:18]

#

tsuriga kirjoitti:

Mitään ei tarvitse luultavastikaan trimmata, kun rivinvaihto on kolmannessa $tiedot indeksissä (eli $tiedot[2] = rivinvaihto).

Itsellä vain tapana trimmailla kaikki (muiden) ihmisten syötteet, vaikka se ei niin välttämätöntä olisikaan. Esimerkiksi ei ole kovin vaikeaa epähuomiossa tehdä tuo ipt.txt muotoon
192.168.0.1 | Tuhma DHCP!

tsuriga [08.12.2005 18:08:49]

#

Trimmaa ne syötteet sinne tiedostoon laittaessa niin ei aina sieltä hakiessa tarvitse. Ja jos systeemi ei toimi, niin sen huomaa testeissä, nuo IP:t kirjoittaa tuonne kuitenkin luultavasti kone valmiiksi annetuilla säännöillä "$ip|$syy|". Kumpi lienee tehokkaampaa, kirjoittaa ylimääräinen | tiedostoon vai trimmata jokaisen rivin viimeinen alkio?

kayttaja-2791 [08.12.2005 18:19:50]

#

tsuriga kirjoitti:

Trimmaa ne syötteet sinne tiedostoon laittaessa niin ei aina sieltä hakiessa tarvitse. Ja jos systeemi ei toimi, niin sen huomaa testeissä, nuo IP:t kirjoittaa tuonne kuitenkin luultavasti kone valmiiksi annetuilla säännöillä "$ip|$syy|". Kumpi lienee tehokkaampaa, kirjoittaa ylimääräinen | tiedostoon vai trimmata jokaisen rivin viimeinen alkio?

Itse oletin että ne syötetään käsin... Ja jos kone hoitaa tuon niin vieläkin tehokkaampaa lienee vetäistä kaikki samalle riville, ja katsoa parillisuuden perusteella IP-syy parit (pilknus) ;)

tsuriga [08.12.2005 18:39:37]

#

Helpompaa on varmaan http:n kautta päivittää tuota bannitiedostoa, tai automatisoida sen päivitys jotenkin. Juu voi olla tehokkaampaa, tosin voi olla myös vieläkin tehokkaampaa pyörittää noita kevyessä tietokannassa. Hainkin lähinnä samanlaisuutta alkuperäiseen yritykseen selkeyden vuoksi. Noinhan se on opetettu myös Putkan oppaassa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta