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!