Diferencia entre revisiones de «Captcha en KumbiaPHP»
m (Revertidos los cambios de 85.54.194.249 (disc.) a la última edición de Joanhey) |
|||
(No se muestran 3 ediciones intermedias de 3 usuarios) | |||
Línea 80: | Línea 80: | ||
class ContactosController extends ApplicationController { | class ContactosController extends ApplicationController { | ||
− | public form(){ | + | public function form(){ |
} | } | ||
− | public formresponse(){ | + | public function formresponse(){ |
} | } | ||
Línea 124: | Línea 124: | ||
form.phtml | form.phtml | ||
<source lang=php > | <source lang=php > | ||
− | <?php echo form_tag('contactos/formresponse', 'method: post' ); ?> | + | <?php |
+ | echo View::content(); | ||
+ | echo form_tag('contactos/formresponse', 'method: post' ); | ||
+ | ?> | ||
<img src='<?php echo URL_PATH . "contactos/captcha/" ?>' id='captcha' alt='CAPTCHA Img' /> | <img src='<?php echo URL_PATH . "contactos/captcha/" ?>' id='captcha' alt='CAPTCHA Img' /> | ||
Línea 155: | Línea 158: | ||
.. | .. | ||
. | . | ||
− | public formresponse(){ | + | public function formresponse(){ |
if ( $this->has_post('code') ){ | if ( $this->has_post('code') ){ | ||
Línea 165: | Línea 168: | ||
$valid = $img->check( $this->post('code') ); | $valid = $img->check( $this->post('code') ); | ||
− | if($valid == true) Flash:: | + | if($valid == true) |
− | + | Flash::success('Captcha valido'); | |
+ | else | ||
+ | Flash::error("Captcha invalido!"); | ||
+ | Router::route_to('action: index'); | ||
} | } | ||
} | } | ||
Línea 177: | Línea 183: | ||
class ContactosController extends ApplicationController { | class ContactosController extends ApplicationController { | ||
− | public form(){ | + | public function form(){ |
} | } | ||
− | public formresponse(){ | + | public function formresponse(){ |
if ( $this->has_post('code') ){ | if ( $this->has_post('code') ){ | ||
/* verificamos si se mando form y si dentro del $_POST esta un campo llamado code | /* verificamos si se mando form y si dentro del $_POST esta un campo llamado code | ||
Línea 189: | Línea 195: | ||
$valid = $img->check( $this->post('code') ); | $valid = $img->check( $this->post('code') ); | ||
− | if($valid == true) Flash:: | + | if($valid == true) |
− | + | Flash::success('Captcha valido'); | |
− | + | else | |
+ | Flash::error("Captcha invalido!"); | ||
+ | Router::route_to('action: index'); | ||
} | } | ||
} | } | ||
Línea 213: | Línea 221: | ||
la vista form.phtml | la vista form.phtml | ||
<source lang=php > | <source lang=php > | ||
− | <?php echo form_tag('contactos/formresponse', 'method: post' ); ?> | + | <?php |
+ | echo View::content(); | ||
+ | echo form_tag('contactos/formresponse', 'method: post' ); | ||
+ | ?> | ||
<img src='<?php echo URL_PATH . "contactos/captcha/" ?>' id='captcha' alt='CAPTCHA Img' /> | <img src='<?php echo URL_PATH . "contactos/captcha/" ?>' id='captcha' alt='CAPTCHA Img' /> | ||
<a tabindex="-1" style="border-style: none" href="#" title="Refresh Image" | <a tabindex="-1" style="border-style: none" href="#" title="Refresh Image" |
Revisión actual del 13:19 15 feb 2019
Este Artículo esta siendo revisado por los Kumbieros. Puedes tomar la información que aqui se encuentra pero no nos hacemos responsable | {{{imageright}}} |
Captcha es el acrónimo de Completely Automated Public Turing test to tell Computers and Humans Apart (Prueba de Turing pública y automática para diferenciar máquinas y humanos).
Se trata de una prueba desafío-respuesta utilizada en computación para determinar cuándo el usuario es o no humano. Muy Util para preservar las seguridad en formularios web, puesto que con este mecanismo evitamos que scripts externos puedan enviar datos al action de tu form, inclusive de manera ciclica, ocasionando una malautilizacion de tu form.
Existe una libreria opensource llamada secureimage http://www.phpcaptcha.org, que te provee clases para generar captcha y agregarlo a tus formularios.
y Con este tutorial lo que se pretende es integrar secureimage con la version 1.0 de kumbia Framework (spirit)
Kumbia Spirit viene con muchos vendors ( libreria desarrolladas por terceros utilizadas en kumbia ) en
( core/vendors/ )
como phpmailer, fpdf, excel etc.
Basta de Blah Blah , y manos a la obra. :)
Descargar de Securimage 2.0 BETA la ultima version de secureimage en este momento es version 2.0 beta esta en zip y en targ.gz
Creeamos la carpeta: core/vendors/secureimage
Dentro de la carpeta Descomprimir el contenido (carpetas y archivos) del compreso que hemos descargado, debe quedar asi:
core/vendors/secureimage/audio
core/vendors/secureimage/backgrounds
core/vendors/secureimage/gdfonts
core/vendors/secureimage/list
core/vendors/secureimage/words
...
..
.
Luego creamos lo que llamaria un gateway de acceso al vendors pues gracias a esto podemos cargar un vendor cualquiera en nuestra aplicacion
creamos nuevamente la carpeta secureimage esta vez en core/libs/ nos queda core/libs/secureimage/
dentro de esta carpeta crear un archivo php con el mismo nombre deberia quedar asi: core/libs/secureimage/secureimage.php
este archivo debe tener el contenido siguiente:
require_once CORE_PATH . 'vendors/secureimage/securimage.php';
come ven es un gateway :)
luego en mi boot.ini que esta en: app/config/
[modules] libs = logger, secureimage
ahora en nuestro controller contactos_controller.php:
class ContactosController extends ApplicationController {
public function form(){
}
public function formresponse(){
}
public function captcha (){
$img = new securimage();
$img->wordlist_file = CORE_PATH . 'vendors/secureimage/words/words.txt' ;
$img->signature_font = CORE_PATH . 'vendors/secureimage/AHGBold.ttf' ;
$img->ttf_file = CORE_PATH . 'vendors/secureimage/AHGBold.ttf' ;
$img->audio_path = CORE_PATH . 'vendors/secureimage/AHGBold.ttf';
$img->show('');
$this->render (NULL, NULL);
}
}
explico un poco el codigo: instanciamos un objecto de class secureimage y modificamos las rutas de acceso a sus archivos (defuentes y words ) que por defecto son de las misma carpeta. como por ejemplo:
$img->wordlist_file = CORE_PATH . 'vendors/secureimage/words/words.txt' ;
ahora:
$img->show('');
Devuelve una imagen con headers y todo eso asi que
$this->render (NULL, NULL);
evita que se convierta en una salida xhtml provocando una salida de error
ahora en nuestra vista
form.phtml
<?php
echo View::content();
echo form_tag('contactos/formresponse', 'method: post' );
?>
<img src='<?php echo URL_PATH . "contactos/captcha/" ?>' id='captcha' alt='CAPTCHA Img' />
<a tabindex="-1" style="border-style: none" href="#" title="Refresh Image"
onClick="document.getElementById('captcha').src = '<?php echo URL_PATH . "contactos/captcha/" ?>'+ Math.random(); return false">
<?php echo img_tag( "refresh.gif", "alt: Reload Image", "onClick: 'this.blur()' ", "border: 0" ) ?>
</a>
<br>
<?php echo text_field_tag('code', 'size: 15');
echo submit_tag("Enviar" );
echo end_form_tag();
?>
el tag html img con id='captcha' es donde se genera la imagen captcha cuyo source es el action de mi controlador
un archivo "refresh.gif" debe estar en public/img/
esta imagen es para poder refrescar la imagen sin necesidad de cargar nuevamente el formulario.
es que a veces realmente no se notan las letras del captcha generado.
el textfield "code" sera donde se ingresa las letras de la imagen captcha generada. Como vemos nuestro form con el captcha apunta al action 'contactos/formresponse' donde estara la validacion del codigo captcha generado
class ContactosController extends ApplicationController {
...
..
.
public function formresponse(){
if ( $this->has_post('code') ){
/* verificamos si se mando form y si dentro del $_POST esta un campo llamado code
*/
// instanciamos secureimage y validamos si el code enviado es valido
$img = new Securimage();
$valid = $img->check( $this->post('code') );
if($valid == true)
Flash::success('Captcha valido');
else
Flash::error("Captcha invalido!");
Router::route_to('action: index');
}
}
ahora todo el codigo completo:
contactos_controller.php
class ContactosController extends ApplicationController {
public function form(){
}
public function formresponse(){
if ( $this->has_post('code') ){
/* verificamos si se mando form y si dentro del $_POST esta un campo llamado code
*/
// instanciamos secureimage y validamos si el code enviado es valido
$img = new Securimage();
$valid = $img->check( $this->post('code') );
if($valid == true)
Flash::success('Captcha valido');
else
Flash::error("Captcha invalido!");
Router::route_to('action: index');
}
}
public function captcha (){
$img = new securimage();
$img->wordlist_file = CORE_PATH . 'vendors/secureimage/words/words.txt' ;
$img->signature_font = CORE_PATH . 'vendors/secureimage/AHGBold.ttf' ;
$img->ttf_file = CORE_PATH . 'vendors/secureimage/AHGBold.ttf' ;
$img->audio_path = CORE_PATH . 'vendors/secureimage/AHGBold.ttf';
$img->show('');
$this->render (NULL, NULL);
}
}
la vista form.phtml
<?php
echo View::content();
echo form_tag('contactos/formresponse', 'method: post' );
?>
<img src='<?php echo URL_PATH . "contactos/captcha/" ?>' id='captcha' alt='CAPTCHA Img' />
<a tabindex="-1" style="border-style: none" href="#" title="Refresh Image"
onClick="document.getElementById('captcha').src = '<?php echo URL_PATH . "contactos/captcha/" ?>'+ Math.random(); return false">
<?php echo img_tag( "refresh.gif", "alt: Reload Image", "onClick: 'this.blur()' " ) ?>
</a>
<br>
<?php echo text_field_tag('code', 'size: 15');
echo submit_tag("Enviar" );
echo end_form_tag();
?>
Espero que les sirva como a mi me sirvio
JIM