Gå til innhold

Anti bot script


Anbefalte innlegg

Videoannonse
Annonse

Godt forsøk men det der er nok ubrukelig med tanke på at det genererte tallet faktisk ligger som ren tekst i HTMLen:

<input type   = "hidden"
      name   = "truenumbers"
      value  = "9245">

 

 

EDIT: Dessuten kan man gå rett til check.php, og få godkjent tallene selv om man ikke har skrevet inn noe som helst.

Endret av Loomy
Lenke til kommentar

Hei,

regner med at du har litt kjennskap til programmering - siden scriptet ditt er ikke det verste nybegynnerscriptet jeg har sett. Der i mot så er det nok desverre ikke mange som burde bruke dette scriptet på sine hjemmesider, for det er en del mangler ved scriptet.

 

1. I path til bildene så starter du med / Dette kan medføre problemer dersom bildene da ikke legges i en mappe direkte under domenet. Legger man scriptet ditt en en mappes, som f.eks. "login" så vil adressen til scriptet være http://domene.no/login, problemet er at da forventer browserene at images mappen skal befinnes seg her: http://domene.no/images. Bytt ut /images med ./images.

 

2. Som Loomy sier så legger du inn passordet i et skjult felt. Dette vil nok være et av de første stedene en litt avansert bruker eller bot også vil lete.

 

3. Navnet på bildene refererer direkte til hvilket nummer det er, igjen vil en avansert bruker bot finnet lett ut av dette.

 

4. Tallene vil være lette for et OCR program å lese. Når du har registrert deg på forskjellige steder har du sikkert sett at teksten er enten forvridd eller så er det mange forstyrrende elementer i bakgrunnen - dette er for å hindre boter tilgang.

 

5. Kanskje mest vesentlig er det som Loomy påpeker i sin edit kommentar! Dette unngår det ved å sjekke variabelene med is_set() eller empty().

 

For å rette opp på problemene anbefaler jeg deg å kikke på sessions og GD funksjonene til PHP for å opprette til bilde.

Lenke til kommentar
?:

 

Synes du er best med kryptert kode med <input type="hidden"> eller session til slikt?

5145376[/snapback]

 

Tja...

Ved å velge et hidden felt med kryptert innhold visere du for alle surfere en hash. Dette gjør at det vil være mulig å knekke den. På den andre siden så er dette snakk om et BOT script og ikke en avnasert login, så jeg ser ikke hensikten med at sikkerheten skal økes noe utover <input type="hidden"... så lenge innholdet er kryptert.

 

Sessions tar ikke lang tid å sette opp, og har de siste par årene blitt mye mer stabile - så dette vil være en tryggere løsning.

 

Likevel, dersom du lager et script folk skal kunne integrere på sine sider så unngå sessions. Det finnes mange poster her med nybegynnere som ikke forstår hvorfor de får feilmelding dersom det har output før session_start().

Lenke til kommentar

Sånn da er jeg ferdig. Bare å skrive hvis dere finner noen bugs eller sikkerhetshull.

 

 

Godt å bemerke seg at O ikke fins og det er 0 dere ser...

 

Kan testes Her

 

 

Edit: Som jeg skulle edite for sånn liten greie da... Bare så det er sagt på forhånd er ikke dette scripet for den som ALDRI har vært borti PHP før, med mindre noen av dere vil skrive en idiotsikker guide.

 

Updates:

 

-I er borte. Er l (altså L i småbokstav) dere ser der...

-Fjernet unødvendig bilde i pakka

-Lagt til font mappa jeg glemte

antibot.zip

Endret av Zic0
Lenke til kommentar
Sessions tar ikke lang tid å sette opp, og har de siste par årene blitt mye mer stabile - så dette vil være en tryggere løsning.

 

Likevel, dersom du lager et script folk skal kunne integrere på sine sider så unngå sessions. Det finnes mange poster her med nybegynnere som ikke forstår hvorfor de får feilmelding dersom det har output før session_start().

5145408[/snapback]

... og da drister jeg meg til å si at databaser er et godt alternativ. Primært av grunnen over (session lager "merkelige" feilmeldinger), men også fordi man merkelig nok har noen paranoide mennesker der ute (ja, de er i et suverent undertall) som ikke aksepterer cookie, noe man normalt tar i bruk i forbindelse med session.

 

Uannsett, da er det bare å generere en ID + en kode, sette det inn i en tabell og vente på at brukerene taster inn den riktige kombinasjonene for tilslutt å slette den raden. Kan lønne seg å samtidig da slette steingamle rader, f.eks de som er over 2-3 timer gamle.

Lenke til kommentar

Tja... det er jo et alternativ. Det kalles forresten å skrive din egen "session handler" eller egen session håndtering for de som ønsker å søke litt på dette området.

 

Problemet med dette er at det tar mye lengre tid å skrive et slikt script enn å bare bruke sessions. Bare vurderingene i forhold til optimalisering, databasestruktur, hva skal man bruke som brukergjenkjennelse og så i tilleg kommer den biten å skrive kodene - og så testing. Glem ikke at noe slik krever grundig testing.

 

Fordelene er i mot er at du da kan få en session til å være gyldig selv om brukeren lukker browseren og kommer tilbake om et par timer, så jeg sier ikke at det ikke finnes fordeler ved dette også - men bare legg til i beregningene at dette tar litt tid :)

Lenke til kommentar

Jeg har ikke kikket på koden din, men fant fort en feil i testen din. Aldri bruk tegnene o, O og 0, I og l (skipp også 1). C, K, U, V og W kan også være vansklig å skille om den skal være liten eller stor - sjekk derfor NØYE med fonten din om det er lett å se forskjell.

 

Jeg har gjennom tidene lagd et par sånne bilde kode scripts, og tro meg - der nybegynnere kan ta feil, der tar de feil!!

Lenke til kommentar

Her er ein klasse eg lagde for YAHONS en stund tilbake.....

 

class ImageCodeGenerator
{

public $Code = "";

public function Execute(){
$image = @imagecreatetruecolor(130, 35); 



// Noise background
for($x=0;$x<imagesx($image);$x++){
for($y=0;$y<imagesy($image);$y++){

if (rand(1,5) == 4 )
{
$nm = rand(0, 80);
}
else{
$nm = rand(190, 230);
}
$col = imagecolorallocate($image, $nm, $nm, $nm);
imagesetpixel($image, $x, $y, $col); 
imagecolordeallocate($image, $col);
}
}

// Border
$nm = rand(140, 160);
$col = imagecolorallocate($image, $nm, $nm, $nm);
imagerectangle($image, 0,0, imagesx($image)-1 , imagesy($image)-1, $col);
imagecolordeallocate($image, $col);

for($i=0;$i<4;$i++){

$nm = rand(0, 80);
$col = imagecolorallocate($image, $nm, $nm, $nm);
$str = substr($this->Code, $i, 1);

if (rand(1,2)==1){
$str = strtolower($str);
}
else{
$str = strtoupper($str);
}


imagettftext($image, rand(16,24), rand(-10, 20), 13+(30*$i), rand(25, imagesy($image)-5 ), $col, "arial.ttf", $str);
//imagestring($image, $font, 5+(26*$i), rand(2, imagesy($image)-30 ), $str, $col);
imagecolordeallocate($image, $col);

}


return $image;
}

}

 

Trur denne blir litt verre for ein bot å sjekke.

 

Var litt N00B når eg skreiv den så..... :hmm:

Lenke til kommentar
Sånn da er jeg ferdig. Bare å skrive hvis dere finner noen bugs eller sikkerhetshull.

 

 

Godt å bemerke seg at O ikke fins og det er 0 dere ser...

 

Kan testes Her

5147645[/snapback]

 

Sikkerhetshull (hvis f.eks. det var mail-skjema): Samme koden kan brukes flere ganger dersom du trykker på "tilbake" knappen i nettleseren.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...