Segurizando tu sitio con Google Recaptcha Enterprise
Todos los días miles de sitios web son atacados mediante técnicas cada vez mas sofisticadas, lo cual hace indispensable, en toda organización, tomarse un tiempo prodencial en pensar y repensar la seguridad en la web
¿Qué nos ofrece Google Recaptcha Enterprise?
A modo de resumen: un servicio capaz de indicarnos si la interacción de un determinado usuario (probablemente un bot) se encuentra dentro de un determindo rango (area de riesgo)
El scoring de riesgo nos provee un número (entre 0.0 y 1.0) siendo 0.0 altisimo riesgo y 1.0 confianza total
Mas info aqui https://cloud.google.com/recaptcha-enterprise
¿Qué necesito para empezar?
- Crea una API Key -> https://cloud.google.com/recaptcha-enterprise/docs/create-key
- Crea una Cuenta de Servicio -> https://cloud.google.com/recaptcha-enterprise/docs/install-on-gcp
Esquema básico
Cliente Javascript
grecaptcha.enterprise.execute('RECAPTCHA_APIKEY', { action: 'SOME_ACTION' })
.then((token) => {
if (token == null || token.trim() === '') {
// Issue here, please handle
return;
}
// User your token (Send to backend)
})
.catch((googleError) => {
// Catch some error here
});
Backend Java
- Para cada llamada al servicio de Recaptcha Enterprise necesitaras un token de autenticacion
GoogleCredentials credentials =
GoogleCredentials.fromStream(new FileInputStream('recaptchaServiceAccountPath'))
.createScoped(Arrays.asList(
"https://www.googleapis.com/auth/cloud-platform"));credentials.refreshIfExpired();
AccessToken token = credentials.getAccessToken();return token.getTokenValue();
2. Teniendo en cuenta que la Cuenta de Servicio vive en un determinado proyecto, debe tener un project-id.
Debes enviar una request via POST a
https://recaptchaenterprise.googleapis.com/v1/projects/YOUR_PROYECT_ID/assessments
3. Puedes utilizar cualquier cliente http, en este caso utilizaré el cliente Resttemplate (Spring Boot)
Map<String, Object> requestMap = new HashMap<>();
Map<String, String> event = new HashMap<>();event.put("token", "TOKEN_FROM_WEB_UI");
event.put("siteKey", "API_KEY");
event.put("expectedAction", "SOME_ACTION");requestMap.put("event", event);MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.put("Content-Type", Arrays.asList(MediaType.APPLICATION_JSON_VALUE));
headers.set("Authorization", "Bearer " + "TOKEN_GENERATED_BY_SERVICE_ACCOUNT");HttpEntity<Map<String, Object>> request = new HttpEntity<Map<String, Object>>(requestMap, headers);RecaptchaEnterpriseResponse apiResponse = restTemplate
.postForObject(recaptchaEnterpriseEndpoint, request, RecaptchaEnterpriseResponse.class);
// Handle result
return apiResponse.getRiskAnalysis().getScore(); // [0.0 - 1.0]
Beneficios
- Máximo control sobre el uso nocivo de tu sitio por parte de atacantes
- Simple de implementar
- Monitoreo integrado en via API en Google Cloud Platform