我将google-recaptcha作为npm软件包下载到了我的项目中,并根据提供的说明进行了设置并“有效”。
除了不是。
在测试中,我输入了垃圾数据作为reCaptcha响应,它仍然有效!然后我输入了一个空白(空)字符串,它也可以正常工作!无论输入什么,reCaptcha似乎都可以正常工作。这是一个以空字符串作为reCaptcha响应参数的示例:
await googleRecaptcha.verify({ response: '' }, (error) => {
if (error) {
console.log('reCaptcha Error: ');
console.log(error);
return {
statusCode: 500,
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
success: false,
message: error.message
})
};
}
console.log('reCaptcha OK');
return {
statusCode: 200,
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
success: true,
message: 'reCaptcha successfully verified!'
})
};
});
在所有情况下,reCaptcha都会发送200 OK响应。我想念什么吗?如果一切都被接受,服务器端验证又有什么意义呢?我给人的印象是Google将reCaptcha响应作为唯一令牌来验证它实际上是有效的(而不是任何人都可以组成的随机字符串)。但这似乎没有这样做。
我尝试手动执行相同的操作(将请求直接发送到Google的reCaptcha验证URL),并获得了相同的结果。