Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

Cloudflare Turnstile

Cloudflare Turnstile es una alternativa inteligente de CAPTCHA proporcionado por Cloudflare que se utiliza para proteger formularios en sitios web contra ataques automatizados, como bots maliciosos o intentos de spam. Para utilizar este servicio es necesario crear una cuenta de usuario  y añadir nuestro sitio web al apartado de Turnstile.

https://www.cloudflare.com/es-es/products/turnstile/

Turnstile

En el apartado de menú Turnstile, debemos de agregar el dominio (puede ser más de uno) de nuestro proyecto. Basta con añadirle un nombre y  la url de la app. Las siguientes opciones las dejamos como siguen:

Image Added

Una vez añadida nuestra app, Cloudflare nos genera un Site Key (una clave que identifica unívocamente nuestro/s dominio/s ) y una Secret key (la clave privada para validar el token referido a nuestro dominio).

Image AddedImage Added

Gitlab

Por seguridad, las variables no deben hardcodearse en el código, por ello una vez generadas en Cloudflare, las metemos en gitlab para poder utilizarlas en nuestro proyecto.

Setting -> ci/cd ->variables

  • TURNSTILE_SECRET_KEY
  • TURNSTILE_SITE_KEY

No olvidar que tiene que haber una por cada entorno y que hay que meter las variables genéricas a la  LISTA_SECRET

Image Added

Una vez creadas, ya podemos meterlas en los filtros del proyecto para utilizarlas. La URL de validación, al ser única y pública podemos meterla directamente hardcodeada en los filtros.

Image Added

Parte del cliente

Usamos la renderización implícita: el widget Turnstile se inicializa automáticamente escaneando el HTML de la página en busca de elementos con la clase cf-turnstile.

El campo cf-turnstile-response contendrá la información necesaria para que el servidor realice esta verificación.


Los pasos básicos a seguir son:

  • Añadimos la librería de cloudflare turnstile (Si utilizamos una plantilla, hay que meterlo en el head)
  • Añadimos el div del captcha: tiene que tener la clase “cf-turnstile” y el atributo data-sitekey con el site-key que representa nuestro dominio.
  • Añadimos un h:input oculto (type=hidden) con el nombre “cf-turnstile response”. Le asignamos un value del manejador para recoger el valor del token.
  • Definimos una función javascript que renderiza nuestro div del captcha y asigna el valor del token de respuesta a la variable de nuestro manejador.Image Added

Con esto, el token queda implementado en el cliente y el token generado, a la espera de la validación en la parte del servidor


Parte del servidor

El captcha ya está puesto en el cliente con el token generado, ahora hay que validarlo frente a la URL de validación ofrecida por Cloudflare.

Los parámetros requeridos en la solicitud son:

  • Secret (site secret key)
  • Response (token)

La API acepta solicitudes/x-www-form-urlencoded y aplicaciones/json, pero el tipo de respuesta siempre será aplicación/json.

La respuesta, siempre contiene una propiedad “success”, ya sea verdadera o falsa, indicando si la operación fue exitosa o no (Es la que utilizamos para comprobar que el token es válido)

Los pasos básicos a seguir son:

Image Added

Si la respuesta no es nula y todo ha ido bien (200 OK), entonces obtenemos CaptchaResponse y devolvemos la propiedad success.


Resumen final con esquema general

Image Added

Tabla de contenidos

Para poder poner el Capta de Google en nuestros formularios necesitaremos tener:

  • Fundeweb 2.x con primefaces 8.0 o superior.
  • Acceso a una cuenta que permita crear Captcha de Google.

Una vez tenemos ambas cosas deberemos hacer dos tareas: Configurar el Capta dentro del espacio de Google y configurar y poner el componente captcha de Primefaces en nuestra aplicación.

Alta de Google Capta

Para dar de alta nuestro Captcha deberemos entrar en la web de gestión de recapta de Google en el sitio de gestión

Image Removed

Para crear un nuevo Captcha deberemos darle al botón   Image Removed tras ello iremos iremos a la pantalla de configuración para un nuevo captcha donde deberemos indicar los siguientes valores:

  • Etiqueta: El nombre para identificarlo dentro de Google Captcha
  • Tipo de reCaptcha: Deberemos indicar v2 y elegir la opción "Casilla No soy un robot".
  • Dominios: Deberemos indicar los dominios sobre los que actuará:
    • Servidores: miaplicacion.um.es, miaplicaciontest.um.es, miaplicaciondesa.um.es
    • Local: miequipo.dev.atica.um.es
Advertencia

Cuando demos de alta un nuevo dominio tendremos que esperar 30 min hasta que esté activo. Si ejecutamos antes de ese tiempo nuestra aplicación nos dará el error ERROR: Invalid domain for site key

Image Removed

Una vez lo hayamos creado se nos facilitará el par de claves pública/privada para usar Captcha

Image Removed

A partir de este punto ya solo quedará configurar nuestra aplicación para que use el componente de primefaces con la configuración dada de alta en Google reCaptcha

Configuración y uso en nuestra aplicación

La configuración y uso es bastante sencillo, para configurarlo deberemos abrir nuestro fichero web.xml y añadir la configuración que indica la wiki de Primefaces para dar de alta las claves de Captcha

Bloque de código
<context-param>
    <param-name>primefaces.PRIVATE_CAPTCHA_KEY</param-name>
    <param-value>YOUR_PRIVATE_KEY</param-value>
</context-param>
<context-param>
    <param-name>primefaces.PUBLIC_CAPTCHA_KEY</param-name>
    <param-value>YOUR_PUBLIC_KEY</param-value>
</context-param>

Una vez configuradas correctamente las claves crearemos nuestro formulario con el elemento captcha de primefaces. 

Bloque de código

		<p:panel header="captcha">
			<h:form>
				<!-- Elemento captcha -->
				<p:captcha></p:captcha>
				...
				...
				...
				<p:commandButton value="Guardar" ajax="false"></p:commandButton>
				<!--Importante: el botón o elemento que haga submit NO puede ser ajax, en primefaces hay que indicar ajax="false" -->
			</h:form>
		
		</p:panel>

El resultado sería el siguiente

Image Removed