Mantén tu clave de API de CAPTCHA fuera del JavaScript del navegador

Por solvethree5 min de lectura

Mantén la clave de API del espacio de trabajo de solvethree en tu servidor. El navegador gestiona el formulario y la sesión de la aplicación; tu backend autenticado gestiona la creación y la consulta de tareas. No sustituyas una clave filtrada en el navegador por una ruta de backend sin restricciones que cualquiera pueda usar para gastar el saldo de tu espacio de trabajo.

En esta página

NEXT_PUBLIC no es el lugar adecuado para una clave del espacio de trabajo

Una clave del espacio de trabajo autentica las solicitudes a solvethree con Authorization: Bearer. Incluirla en el JavaScript del navegador, incluso mediante una variable de entorno pública integrada en el paquete como NEXT_PUBLIC_SOLVETHREE_API_KEY, expone esa credencial al navegador. Ofuscar el valor o añadirlo solo al realizar una llamada fetch directa no lo hace privado.

Mantén SOLVETHREE_API_KEY en una configuración exclusiva del servidor y úsala solo desde código de servidor de confianza. El navegador debe llamar a la ruta de tu aplicación, nunca a la API de tareas de solvethree con la clave de tu espacio de trabajo.

Mantén los parámetros de la tarea en una función auxiliar exclusiva del servidor

Función auxiliar exclusiva del servidor · guardar aquí las credenciales del espacio de trabajo
// Import only from trusted server code. Your application authenticates the caller.
import { Solvethree } from '@solvethree/sdk';
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
export async function createCaptchaForLogin(requestId) {
  return client.createTask({
    site: process.env.CAPTCHA_SITE,
    action: 'login',
    proxy: process.env.SOLVETHREE_PROXY,
    requestId,
  }, { waitMs: 0, signal: AbortSignal.timeout(20000) });
}
// The browser calls your authenticated application route, not the solver API.
// Save the returned task ID; retrieve that ID from server code with getTask.
// Submit a ready token using the proxy/browser identity attached to that solve.
// Merely moving the key server-side does not configure the browser's proxy.

Configura SOLVETHREE_API_KEY, CAPTCHA_SITE y SOLVETHREE_PROXY en el servidor. CAPTCHA_SITE es el nombre de host de destino, no una URL completa. La función auxiliar fija la acción en login y proporciona un proxy; el navegador no elige ninguno de esos parámetros.

Configura un perfil activo para ese nombre de host en el espacio de trabajo antes de llamar a la función auxiliar. Enviar site y action no crea uno. Consulta la configuración del perfil del sitio.

waitMs: 0 solicita la creación sin esperar a que termine la resolución. Guarda el ID de tarea devuelto y consulta la tarea desde el código del servidor con getTask. La señal de cancelación de 20 segundos de la función auxiliar limita esa solicitud; no garantiza que la resolución termine en 20 segundos.

Expón una operación de inicio de sesión, no un servicio de resolución arbitrario

La función auxiliar no constituye por sí sola una ruta autenticada. Aplica estas comprobaciones antes de aceptar solicitudes del navegador:

Contrato de solicitudes del navegador al backend
Contrato de solicitudes del navegador al backend
OperaciónEl navegador envíaEl backend realiza
Iniciar la resolución para el inicio de sesiónLa sesión de la aplicación y un requestId para este intento de inicio de sesión.Autentica al solicitante, valida el intento, comprueba los límites de creación y llama a la función auxiliar con parámetros fijos. Guarda el ID de tarea asociado a ese solicitante y a ese intento; devuelve solo el ID de tarea y el estado que necesita la interfaz.
Consultar el progresoLa sesión de la aplicación y el ID de tarea devuelto para ese intento.Comprueba que la tarea pertenece al solicitante antes de consultarla. Devuelve el progreso, una respuesta de error controlada o el resultado listo que necesita el cliente autorizado para enviarlo.

No reenvíes un cuerpo de tarea proporcionado por el navegador. Rechaza los intentos de elegir otro nombre de host, acción, proxy o tipo de tarea. Aplica un límite de creación por solicitante o sesión de la aplicación: un solicitante autenticado también puede agotar el saldo iniciando tareas nuevas. Si la ruta usa autenticación mediante cookies, protege las solicitudes de creación de tareas contra la falsificación de solicitudes entre sitios.

Un ID de tarea no equivale a una autorización. Comprueba la propiedad en cada solicitud de progreso y no devuelvas credenciales del espacio de trabajo ni del proxy del servidor en las respuestas al navegador.

Recupera la tarea existente antes de crear otra

  • Mantén un único requestId para el intento lógico de inicio de sesión. Valida su formato documentado: entre 1–64 letras ASCII, números, guiones bajos o guiones. Vincúlalo al intento del solicitante; no es una credencial de autenticación.
  • Si la creación agota el tiempo de espera, conserva ese requestId y los parámetros originales de la tarea. Repetir la misma solicitud con el mismo ID recupera la tarea existente. Cambiar los parámetros y reutilizar el ID genera un conflicto.
  • Gestiona las respuestas HTTP no satisfactorias antes de interpretar una respuesta de éxito. En una tarea consultada, pending y solving indican que debes seguir consultando; ready indica que hay una solución disponible.

Una vez que tengas un ID de tarea, consulta esa tarea en lugar de iniciar otra resolución cada vez que se actualice el navegador o se solicite el progreso. Consulta la gestión de errores de la API para diagnosticar los fallos.

Decide qué cliente enviará el token

Antes de devolver al navegador un token listo, decide dónde se ejecutará la solicitud al destino. El cliente que la envíe debe usar la identidad devuelta en userAgent y secChUa, así como el proxy con el que se completó la resolución. Trasladar la clave del espacio de trabajo a un backend no configura el proxy del navegador.

Si el navegador no puede realizar el envío con esa configuración, entregarle solo el token no constituye una integración completa. Usa un cliente de envío que puedas configurar de forma coherente, sin mezclar la identidad, el proxy o la URL de destino de otra sesión. Una tarea lista significa que solvethree ha generado una solución, no que el destino haya aceptado la solicitud posterior.

Ejecuta tu primera tarea.

Empieza con $5 de crédito en tu espacio de trabajo.

Crear un espacio de trabajo
Mantén tu clave de API de CAPTCHA fuera del JavaScript del navegador · solvethree