Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    27

    Form "buggato"? I bot riescono a spammare.

    Salve a tutti, ho alcuni problemi con un form per l'invio di messaggi su di una shoutbox (accessibile anche agli utenti non registrati). Da un po' di tempo, ossia più o meno da quando il mio sito è diventato visibile su google, sono arrivati sti rompiballe di bot a spammarci dentro.
    Subito ho pensato di risolvere con un captcha, l'ho integrato alla meglio manualmente, però non so come riescono lo stesso ad entrare.

    Per inviare il messaggio devono premere il bottone "invia", ma io ho fatto quanto segue:

    1) il bottone ha un onClick="return funzionexyz()", dove la funzione returna sempre false (quindi al primo giro il submit fallisce) e lancia un popup contenente il captcha da inserire: se il codice è inserito correttamente, allora la finestrella-popup lancia un window.opener.document.chatForm.submit(), che quindi inoltra il messaggio al database e quindi alla shoutbox.
    2) nei vari campi <label> e <input> che compongono il form c'erano degli attributi "onkeypress", che avevo visto funzionare inoltrando il messaggio senza il check de captcha: li ho rimossi, pensavo funzionasse ma BAM 10 minuti dopo un bot già mi aveva rispammato.
    3) ho provato con il ban degli ip ma ovviamente ho fallito perchè lo cambiano..

    non so più che fare, provo a postarvi il form, magari trovate qualche falla che a me sfugge

    codice:
    <form id="chatForm" name="chatForm" method="post" action="index.php">
    		
    
    
    			<?php $name = ($params->get("name")) ? $user->get('name') : $user->get('username'); ?>
    			<?php if($loggedin != 'guest') :  /* If they are logged in, then print their nickname */ ?>
    			<label><?php echo JText::_( 'NAME'); ?> <?php echo $name; ?></label>
    			<input type="hidden" name="shoutboxname" id="shoutboxname" class="inputbox" value="<?php echo $name; ?>" />
    			<?php else:  /* Otherwise allow the user to pick their own name */ ?>
    			<label for="shoutboxname"><?php echo JText::_('Nome:'); ?></label>
    			<input type="text" name="shoutboxname" id="shoutboxname" class="inputbox" value="<?php if (isset($_COOKIE['jalUserName'])) { echo $_COOKIE['jalUserName']; } ?>" />
    			<?php endif; ?>
    			<?php if (!$params->get('url')) : ?>
    			<span style="display: none">
    			<?php endif; ?>
    			<label for="shoutboxurl">Url:</label>
    			<input type="text" name="shoutboxurl" id="shoutboxurl" class="inputbox" value="<?php if (isset($_COOKIE['jalUrl'])) { echo $_COOKIE['jalUrl']; } else { echo 'http://'; } ?>" />
    			<?php if (!$params->get('url')) : ?>
    			</span>
    			<?php endif; ?>
    			
    			<label for="chatbarText"><?php echo JText::_( 'Messaggio:'); ?></label>
    			<?php if ($params->get('textarea')) : ?>
    			<?php
    			$Form = '';
    			$mainframe->triggerEvent('onBBCode_RenderForm', array('document.forms.chatForm.chatbarText', &$Form) );
    			echo $Form;
    			?>
    			<textarea rows="4" cols="16" name="chatbarText" id="chatbarText" class="inputbox"></textarea>
    			<?php else: ?>
    			<input type="text" name="chatbarText" id="chatbarText" class="inputbox"/>
    			<?php endif; ?>
    			<input type="text" name="website" id="website" class="website" />
    		</p>
    		<?php if(JPluginHelper::isEnabled('system', 'yvsmiley')): ?>
    		<?php echo JText::_( 'SMILEYS'); ?>
    		<?php 
    		$smilies = '';
    		$mainframe->triggerEvent('onSmiley_RenderForm', array('document.forms.chatForm.chatbarText', &$smilies, 'sbsmile') );
    		echo $smilies;
    		?>
    		<?php endif; ?>
    		<input type="hidden" id="jal_lastID" value="<?php echo $lastID + 1; ?>" name="jal_lastID" />
    		<input type="hidden" name="shout_no_js" value="true" />
    		
    		<input type="submit" name"submit" class="button" value="invia" onClick="return PopupCentrata()"/>
    		
    	</form>
    -ho evidenziato in verde la parte commentata dove ho tolto i due onkeypress
    -ho evidenziato in rosso l'<input> in cui viene richiamata la funzione che poi apre la popup e dovrebbe fare il controllo del captcha
    -ho evidenziato in blu una parte che non mi torna giusta, ossia, al di sotto del label evidenziato (nella pagina internet che l'utente visualizza) c'è l'input box per inserire il proprio nome. Se io, sempre sul sito dico, inserisco il mio nome e SEMPRE rimanendo nell'input box del nome premo invio, mi appare la finestrella popup del captcha, anche se io nell'<input> appena sotto il label ho tolto l'onkeypress. Questa non mi torna e non vorrei fosse qui il bug del mio form

    Vi ringrazio per l'attenzione, spero di essere stato chiaro. In caso vi posto altre parti del codice (vi ho scritto solo il form per non appesantire troppo la discussione )

    Attendo vostre nuove!

  2. #2
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    non ho letto tutto con attenzione ma da quanto ho capito
    fai un controllo captcha LATO CLIENT.
    giusto?

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    27
    uhm mi cogli impreparato.. non saprei risponderti.. come lo capisco se è lato server o client?


    edit:

    Ragionandoci un po' penso di si, perchè prima di fare il submit del form il controllo sul captcha è gia bello che fatto. quindi (se non ho preso un granchio) si, è lato client

  4. #4
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    qundi è l'operazione più inutile che si possa fare.
    ovvero stai chiedendo a chi si trova davanti allo schermo se è un uomo o una macchina

    il controllo va effettuato lato server sui risultati forniti prima dell'inserimento,
    proteggere il form non ha senso: devi proteggere lo script.

    nessun boot passa dal form per bussare alla porta, ti pare?

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    27
    giustissima osservazione. Non avevo considerato sta cosa del lato client o server.

    Però non saprei come risolver la cosa devo far inserire lato client i dati del captcha e poi mandarli al server per il controllo?

  6. #6
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    esatto

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    27
    porta pazienza ma son abbastanza ignorante in materia..

    come potrei fare? modifico il form o sposto la funzione?

  8. #8
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    in sostanza... la variabile captcha la deve inserire l'utente e tu fai il controllo che sia vera.

    quindi la funzione di controllo va spostata nello script che riceve.

    per tutto il resto c'è la sezione PHP

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    27
    uhm.. vediamo se ho capito:

    il mio form ha action="index.php". Se non erro ciò che viene submittato all'interno del form viene passato quindi all'index. Devo quindi riuscire a spostare il controllo del captcha inserito e inviato dall'user all'interno dell'index.php?

    e altra domanda: il mio captcha (immagine + inserimento codice) dove lo creo? lato user? poi dovrò mandare tutto al server, però devo mandargli sia un riferimento all'immagine che ha scelto random sia al codice inserito dall'utente, perchè senno come decodifica il tutto?

    mi sa che è più incasinato del previsto!

  10. #10
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    1) si, ovviamente

    2) il codice lo crei lato server, invii il codice formato immagine al client, il client ti invia il codice un chiaro, tu verifichi che sia vero. poi procedi altrimenti fermi.

    è un po' complesso ma ce la puoi fare

    soprattutto se guardi tra le risorse di HTML.IT (e non solo)
    dovresti trovare qualche esempio già pronto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.