- Home
- Categorie
- Coding e Sistemistica
- PHP
- form con codice di sicurezza
-
form con codice di sicurezza
Mi serviva un form antispam costruito in php
Io non ho trovato nulla in rete che non ci siano le librerie grafiche di mezzo per rappresentare il codice.
Io avevo pensato a javascript, dove il bot non dovrebbe trovarlo.
in ogni caso come posso fare?
ciao
-
Forze ci sono riuscito, ma ho ancora bisogno di qualche aiuto per continuare
ho usato delle costanti fisse che contenevano gli indirizzi di alcune .gif che contenevano lettere e numeri
poi ho fatto 6 rand del tipo:
$a = rand(27,36);dove 27,36 andavano a trovare questo numero causale che serviva per riprendere la costante precedente in questo modo:
$ff1 = ${'cod'.$a};
$filename1 = "$folder/$ff1";ripetuto questo per 6 volte, il numero degli elementi di codice
poi arriva il punto della lettura e quindi faccio:
$fp1 = @fopen($filename1,'rb');
$str1 = @fread($fp1,filesize($filename1));dove $filename1 contiene l'indirizzo dell'immagine dell numero causale
ed infine
header('Content-type: image/gif');
echo "$str1";sempre per 6 volte
e correttamente mi compaiono sulla pagina i sei numeri causali, di cui non so l'indirizzazione , quindi non potrei riconoscerli.
ma ora il fatto è che ho un problema con gli header content
nel senso che si aprono correttamente le immagini...ma ora il testo html che scrivo subito dopo gli echo non mi vengono visualizzati perchè vengono riconosciuti come formati gif.
ho provato anche a fare
header('Content-type: text/html');
ma è stato unutile?
come devo fare ora? non esiste poi un modo per chiudere questi header?
-
uh?
-
?
-
Io ho fatto questo.
Crea un file captcha.php e mettici questo codice.
[PHP]
<?
session_start();
$risultato = rand(0,9).rand(0,9).rand(0,9).rand(0,9);
$immagine = imagecreatefromjpeg("captcha.jpg");
$testo = imagecolorallocate($immagine, 0, 0, 0);
$font = imageloadfont("captcha.gdf");
imagestring($immagine, $font, 1, 3, $risultato, $testo);
$_SESSION['controllo_captcha'] = $risultato;
header("Content-type: image/jpeg");
imagejpeg($immagine);
?>
[/PHP]Il file captcha.jpg deve essere un immagine 85x30, ti allego quella che uso io. Poi nella stessa cartella devi mettere il font in formato gdf, ti allego zippato quello che uso io.
poi in fondo al form metti una cosa del genere:
[HTML]
<tr>
<td>Codice di controllo</td>
<td>
<img src="captcha.php"><br>
Il codice qui sopra è <input type="text" name="chiave">
</td>
</tr>
[/HTML]e prima di mandare un'email fai questo semplcie controllo
[PHP]
if($chiave!="" AND $_SESSION['controllo_captcha']==$chiave) {
// manda email
}else{
// segnala che il codice è sbagliato
}
[/PHP]Molto più semplice di quelli complessi che salvano file e cose del genere. Poi questo è molto personalizzabile, puoi mettere la foto che vuoi al posto dei numeri o puoi modificare il file usando imagettftext invece di imagestring, così puoi usare qualsiasi font ttf.
-
@scar81 said:
Io ho fatto questo.
Crea un file captcha.php e mettici questo codice.
[PHP]
<?
session_start();
$risultato = rand(0,9).rand(0,9).rand(0,9).rand(0,9);
$immagine = imagecreatefromjpeg("captcha.jpg");
$testo = imagecolorallocate($immagine, 0, 0, 0);
$font = imageloadfont("captcha.gdf");
imagestring($immagine, $font, 1, 3, $risultato, $testo);
$_SESSION['controllo_captcha'] = $risultato;
header("Content-type: image/jpeg");
imagejpeg($immagine);
?>
[/PHP]Il file captcha.jpg deve essere un immagine 85x30, ti allego quella che uso io. Poi nella stessa cartella devi mettere il font in formato gdf, ti allego zippato quello che uso io.
poi in fondo al form metti una cosa del genere:
[HTML]
<tr>
<td>Codice di controllo</td>
<td>
<img src="captcha.php"><br>
Il codice qui sopra è <input type="text" name="chiave">
</td>
</tr>
[/HTML]e prima di mandare un'email fai questo semplcie controllo
[PHP]
if($chiave!="" AND $_SESSION['controllo_captcha']==$chiave) {
// manda email
}else{
// segnala che il codice è sbagliato
}
[/PHP]Molto più semplice di quelli complessi che salvano file e cose del genere. Poi questo è molto personalizzabile, puoi mettere la foto che vuoi al posto dei numeri o puoi modificare il file usando imagettftext invece di imagestring, così puoi usare qualsiasi font ttf.
si si...andrebbe bene però se ho un server linux.....
invece avendo un server windows le librerie GD non le ho disponibili e di conseguenza non posso usare nessun sistema captcha
ciao
-
vabbè, provo allora a pensarne una io, ditemi se è un sistema sicuro
mettiamo il caso che ad ogni form compare una domanda a semplice testo del genere:
fai la somma di tre con cinque e dividilo per due
dove può variare in:
addiziona tre con cinque e dividi per due
fai tre più cinque e il risultato dividilo per due
ecc....Secondo voi un bot riesce a capire?
chiaramente se il risultato viene sbagliato, una,due,tre volte poi gli viene bloccato l'accesso ad ip, che dite?
-
Sì è fattibile, l'ho già visto su un altro sito. Però limitati ad una addizione fra tre numeri, altrimenti ti saltano fuori i decimali....
-
@scar81 said:
Sì è fattibile, l'ho già visto su un altro sito. Però limitati ad una addizione fra tre numeri, altrimenti ti saltano fuori i decimali....
ora che ci penso avevano messo su un antibot che anche senza librerie grafiche ti metteva in rand 4 immagini di donne, e se tu selezionavi quella più brutta andavi avanti con il form
non ricordo il nome...azz :D:D
-
Ma quello è soggettivo!
-
difficile che ora c'è un server bot cosi intelligente come contempt
Inizialmente pensavo di mettere calcoli più complessi, ma poi ho facilitato un pò
stavo pensando di fare anche una variazione con le lettere del tipo:
Se io metto le lettere OTSET al contrario cosa leggo?
oppure
Il contrario di veloce?
Il sinonimo di.....ecc...oppure mettere questo gioco di parole abbinato ai calcoli
Collegato a un database di un migliaglio di parole può essere veramente un sistema intaccabile.
che ne pensate?
-
Se dovessi compilare un modulo dove mi fano una domanda del genere non capirei perchè la fai e ti prenderei per matto.
Fai così, crea una decina di captcha a mano (cioè non automatici, con paint o qualcosa del genere) e ogni volta ne carichi uno a random. Ogni tanto ne rifai una decina e vai avanti così. Tanto nessuno si sbatterebbe per fare un bot solo per il tuo sito, perchè dovrebbe modificarlo in continuazione.
-
@scar81 said:
Se dovessi compilare un modulo dove mi fano una domanda del genere non capirei perchè la fai e ti prenderei per matto.
Fai così, crea una decina di captcha a mano (cioè non automatici, con paint o qualcosa del genere) e ogni volta ne carichi uno a random. Ogni tanto ne rifai una decina e vai avanti così. Tanto nessuno si sbatterebbe per fare un bot solo per il tuo sito, perchè dovrebbe modificarlo in continuazione.si all'inizio avevo fatto uno script di random image, ma il fatto è che alla fine il il bot capisce eccome... per esempio potrebbe prendere nota della grandezza totale dell'immagine o del numero di colori....tanto voglio dire le immagini che girano sono sempre le stesse
img1.jpg
img2.jpg
img3.jpge anche se nascoste sotto i get image per non mostrare il nome file non servirebbe poi a molto, con il captcha invece utilizzano la variazione dei colori proprio perchè i numeri vengono mstrati sempre in modo diverso, o con segni o altri simboli sopra di essi per rendere irriconoscibile l'immagine e incasinare il bot.
Quindi non so se cosi funziona o sbaglio?
-
E' vero che la mia soluzione non è perfetta, ma per scardinare un sistema del genere un programmatore dovrebbe sbattersi per 1 ora come minimo per creare uno script che entri nel tuo form. E ti basterebbe cambiare le 10 immagini per buttare all'aria tutto il suo lavoro.
Lo farebbe solo se ne avesse un guadagno in termini di tempo. Ma se deve metterci un'ora per fare un sistema automatico, tanto vale che ti spamma a mano no??
-
@scar81 said:
E' vero che la mia soluzione non è perfetta, ma per scardinare un sistema del genere un programmatore dovrebbe sbattersi per 1 ora come minimo per creare uno script che entri nel tuo form. E ti basterebbe cambiare le 10 immagini per buttare all'aria tutto il suo lavoro.
Lo farebbe solo se ne avesse un guadagno in termini di tempo. Ma se deve metterci un'ora per fare un sistema automatico, tanto vale che ti spamma a mano no??No credimi con i sistemi che ci sono oggi niente diventa impossibile, con un sistema che ti ho fatto vedere io penso che un programmatore con le balls arriva a trovare un modo per baipassarlo in pochi minuti.
E' per questo che stò impiegando parecchio tempo a capire come renderlo invulnerabile.
Solo che il punto è questo, già come ho creato io il sistema è fin troppo noioso per un utente andarlo ad eseguire tutto per filo e per segno, figurati se lo incasino ancora di più.
Stavo pensando comunque di metterci anche un controllo ip, nel senso che se uno sbaglia più di tre volte è fuori gioco e e al posto di contempt.php gli viene cambiato con la stessa pagina ma senza uscita in contempt2.php cosi che avrà tutto il tempo che vuole per giocare
Comunque qualche rand con piccole immagini di pochi pixel la devo pur fare, abbinata magari a quello che già c'è ora
e qui però chiedo aiuto... come faccio a nascondere il nome delle immagini?
del tipo che il bot potrebbe andare a cercare;
<img src="numerocinque.jpg"> diverso da <img src="numerodue.jpg">
e ottenere 52
come le nascondo?
-
Non credo di aver ben capito cos'hai in mente, comunque puoi fare un semplice file immagine.php che apre il file che decidi tu e restituisce l'immagine con un header("Content-type: image/jpeg");
Il valore lo salvi in sessione e lo recuperi nel file con il form, per fare il confronto.
-
@scar81 said:
Non credo di aver ben capito cos'hai in mente, comunque puoi fare un semplice file immagine.php che apre il file che decidi tu e restituisce l'immagine con un header("Content-type: image/jpeg");
Il valore lo salvi in sessione e lo recuperi nel file con il form, per fare il confronto.aspetta non penso di aver capito, ho provato cosi:
[PHP]header("Content-type: image/jpeg");
$var=fopen("immagine.jpg","r");
$var2=fread($var,filesize("immagine.jpg"));
echo "<img src='$var2'>";[/PHP]o con include "jpg";
ma ottengo tutti caratteri particolari e nessuna immagine
che devo scrivere?
-
Prova con
[PHP]
header("Content-type: image/jpeg");
$contents = file_get_contents("immagine.jpg");
echo $contents;
exit(0);
[/PHP]
metti questo codice in un file immagine.php che richiamerai da un <img> come se fosse un immagine.
-
@scar81 said:
Prova con
[PHP]
header("Content-type: image/jpeg");
$contents = file_get_contents("immagine.jpg");
echo $contents;
exit(0);
[/PHP]
metti questo codice in un file immagine.php che richiamerai da un <img> come se fosse un immagine.Ohhh...ora si che è completo contempt
senza creare tanti file php ho immesso i file get contents dentro constanti nella stessa pagina:
come puoi vedere nel codice sorgente andando a visualizzare un numero cosi, ogni volta che fai un refresh cambia continuamente, quindi dinamico
ciao
-
Ciao volevo ringraziarvi perchè grazie a questa discussione, dopo giorni e giorni ho finalmente risolto il mio problema con il captcha!!! Grazieeeeeeeee!!!!