Captcha[V2] (Spam Protection)

Door Wouter De Schuyter, 18 jaar geleden, 5.813x bekeken

De opvolger van mijn eerste captcha. Wat is er nieuw/veranderd? Niet heel veel eigenlijk, er zijn juist lijnen aan de achtergrond toegevoegd en een rand (natuurlijk kan je dit enabelen of disabelen).
Heb ook een ander simpel font er in gestoken omdat ik wel vaker hoor dat het font twijfelachtig was (hoofdletter/kleine letter).

In het voorbeeldje online gebruik ik enkel cijfers, letters gaan natuurlijk ook, moet je gewoon maar even de string met de tekens aanpassen.

Download Rar: http://downloads.paradox-productions.net/?f=CAPTCHA%5BV2%5D.rar

Online Voorbeeld: http://projects.paradox-productions.net/CAPTCHA%5BV2%5D/EXAMPLE.php

Voorbeeld: http://projects.paradox-productions.net/CAPTCHA[V2]/EXAMPLE.

Gesponsorde koppelingen

PHP script bestanden

  1. captchav2-spam-protection

 

Er zijn 16 reacties op 'Captchav2 spam protection'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Onbekend Onbekend
Onbekend Onbekend
18 jaar geleden
 
0 +1 -0 -1
Uhm botjes kunnen toch gewoon een sessie uitlezen? Tenminste ik dacht zoiets gehoord te hebben. Sla het op in een database ofzo.

Of geef de code als alt value mee ofzo das net zo slim ^^
Gerben G
Gerben G
18 jaar geleden
 
0 +1 -0 -1
Een sessie is server side. Dus niet uit te lezen door een bot
Wouter De Schuyter
Wouter De Schuyter
18 jaar geleden
 
0 +1 -0 -1
@Tommy; dit heb je de vorige keer ook gezegd, dit is niet mogelijk. Mathijs heeft je dan ook uitgelegd wat de enige mogelijke manier zou zijn om deze uit te lezen..


18 jaar geleden
 
0 +1 -0 -1
Pcies^^

Op zich een net scriptje al zie ik intussen door de CAPTCHA's de spammers niet meer. Bovendien dacht ik dat dergelijke captcha's al vrij snel doorbroken konden worden. Verzin eens iets leukers, iets met sommetjes of woord achterstevoren intypen of wat dan ook ;)
Verder mooi script, hoewel ik het toch bij Zend_Captcha() houd ^^

@Tommy: met de code als ALT ingesteld is je CAPTCHA helemaal makkelijk te kraken. Gewoon de ALT uitlezen en je hebt de code.
- -
- -
18 jaar geleden
 
0 +1 -0 -1
Binnen 5 uur tijd heb ik een script die jouw captcha kan ontcijferen binnen een seconde... Ga werken met lijntjes over de letters heen, meerdere lettertypes en groottes, gekantelde letters, etc...
Iltar van der berg
iltar van der berg
18 jaar geleden
 
0 +1 -0 -1
Of zorg er gewoon voor dat het iets waar een voor geprogrammeerde bot niet aan kan voldoen :)
PHP Newbie
PHP Newbie
18 jaar geleden
 
0 +1 -0 -1
@Jonathan,

Show us your start
- -
- -
18 jaar geleden
 
0 +1 -0 -1
Ik ga er nu geen vijf uur in investeren, maar leg het wel even kort uit:

Eenmalig doe jij dit met de hand:
1) Kopieer/refresh de captcha van de TS naar Photoshop zodat je alle tekens hebt.
2) Haal in Photoshop met de hand de tekens eruit, en maak daar een array van. (Zie onder voor een voorbeeld van zo'n array).

Dit doet het script:
1) Had de afbeelding in vier stukken.
2) Zoek alle pixels die RGB >= 200 en maak deze wit (dat zijn de lijntjes).
3) Haal aan de zijkanten van alle afbeeldingen de witte stukken weg.
4) Laat PHP zoeken naar de gekleurde pixels (de letters dus) en maak daar ook een array van.
5) Vergelijk de arrays met elkaar en zoek naar een match van bijvoorbeeld 90%.

Hier een voorbeeld van zo'n array. Ik heb hier het cijfer 1 gebruikt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
010
110
010
010
010
111

Dit zet je dan om in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
array
(
    0, 1, 0,
    1, 1, 0,
    0, 1, 0,
    0, 1, 0,
    0, 1, 0,
    1, 1, 1
);
PHP Newbie
PHP Newbie
18 jaar geleden
 
0 +1 -0 -1
En wat dacht je dan van deze?
Menno
menno
18 jaar geleden
 
0 +1 -0 -1
@PHP Newbie
Die is wel netjes, maar release je die ook of niet?
Lode
Lode
18 jaar geleden
 
0 +1 -0 -1
PHP newbie

zet eens een if(isset($_SESSION)){} om je session start heen zucht*
Wouter De Schuyter
Wouter De Schuyter
18 jaar geleden
 
0 +1 -0 -1
@Jonathan, hoe wil je dat doen? Met 4 tekens en een string die je zelf kan opgeven kan je oneindig veel combinaties maken en de kleuren van de tekens zijn telkens anders..
PHP Newbie
PHP Newbie
18 jaar geleden
 
0 +1 -0 -1
Menno, ja hoor, code heb ik hier al in de comments geplaatst. Bij deze nog een keertje:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
/*
    $iiX     = Image Identifier
    $ciX     = Color Identifier
*/

session_start(); //Start sessie

$iNumberCharacters     = 4; //Aantal karakters dat de captcha lang is
$aCharacters         = array_merge(array_merge(range('a','z'),range('A','Z'),range(0,9))); //Karakters die in de captcha voor kunnen komen
$sFontLocation         = "font.ttf"; //Locatie van het font bestand
$iFontSize             = 16; //Gemiddelde lettergrote (werkelijke grote varieert van dit getal - 2 tot dit getal + 3

$iRgbMin = 30; //Minimale waarde voor de kleur (RGB waarde)
$iRgbMax = 200; //maximale waarde voor de kleur (RGB waarde)

//Aan de slag:

$iiCaptcha = imagecreate($iNumberCharacters * 21, $iFontSize * 2.9); //creer een nieuwe afbeelding met behulp van bovenstaande gegevens
imagecolorallocate($iiCaptcha, rand(210,255), rand(210,255), rand(210,255)); //En maak de achtergrond random

$ciFontColorGrey = imagecolorallocate($iiCaptcha, 180, 180, 180); //De schaduw wordt grijs, dus die kleur maken we vast aan
$_SESSION['captcha'] = null; //we maken een sessie aan waarin het getal komt

$aRotation = array_merge(range(35,15),range(-35,15));

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

    $sFontCharacter     = $aCharacters[array_rand($aCharacters)]; //We kiezen een random karakter
    $ciFontColor         = imagecolorallocate($iiCaptcha, rand($iRgbMin, $iRgbMax), rand($iRgbMin, $iRgbMax), rand($iRgbMin, $iRgbMax)); //We nemen een random kleur
    $iFontSize             = rand($iFontSize - 2, $iFontSize + 2); //Een min of meer random font-size
    $iFontAngle         = $aRotation[array_rand($aCharacters)]; //En een random hoek
    
    imagettftext($iiCaptcha, $iFontSize, $iFontAngle, 5 + $i * 19, $iFontSize * 1.5 + 2,     $ciFontColorGrey,     $sFontLocation, $sFontCharacter); //We maken even wat schaduw
    imagettftext($iiCaptcha, $iFontSize, $iFontAngle, 3 + $i * 19, $iFontSize * 1.5,         $ciFontColor,         $sFontLocation, $sFontCharacter); //En de letter zelf
    
    $_SESSION['captcha'] .= $sFontCharacter; //En natuurlijk moet de letter toegevoegd worden aan de sessie
}

header("content-type: image/png"); //Even header setten

imagepng($iiCaptcha); //afbeelding uitpoepen
imagedestroy($iiCaptcha); //en direct weer verwijderen
?>


@Lode, wat bedoel je?
--
--
18 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(!isset($_SESSION))
{

    session_start();
}

?>
- -
- -
18 jaar geleden
 
0 +1 -0 -1
@PHP Newbie:
Die lukt inderdaad (zo snel) niet...

@Paradox:
Mijn werkwijze staat toch duidelijk een aantal posts hierboven? Het komt erop neer dat je alle tekens los haalt en detecteert welke tekens bij een letter horen (= gekleurd zijn), en die vergelijk je met de 26 letters van het alfabet. En dat alles gebeurt in minder dan één seconde.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Bo Bo
Bo Bo
18 jaar geleden
 
0 +1 -0 -1
@php newbie:
script is slecht.. daar komt een goede spambot zo doorheen..

het lukt bots ook om door mijn captcha heen te komen:
http://www.waarisjoran.nl/discussie/4#bottom

en die is soms niet eens leesbaar.. dus die captcha's hier boven zijn iig niet veilig genoeg

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. captchav2-spam-protection

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.