经过一些测试,看起来你可以做前端部分。数据回调函数不会被调用,直到谷歌确信你是一个人,如果谷歌不确定,然后它加载“选择哪些瓷砖有一件事情”reCaptcha肯定。一旦reCaptcha api确定它是一个人,数据回调函数被触发 - 那时你可以做进一步验证,以确保你在回调期间收到的令牌是谷歌实际发送的令牌,而不是试图通过点击回调函数来欺骗你 - 所以你从服务器端进行处理以进一步验证。下面是一个C#ashx的处理程序示例 - 用于验证
function onTestSubmit(token) {
$.ajax({
type: "POST",
url: "testHandler.ashx",
data: { token: token },
success: function (response) {
if (response == "True") {
//do stuff to submit form
}
}
});
}
而且
public class testHandler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
string token = context.Request.Form["token"];
bool isCaptchaValid = ReCaptcha.Validate(token);
context.Response.Write(isCaptchaValid.ToString());
}
public bool IsReusable {
get {
return false;
}
}
}
public class ReCaptcha
{
private static string URL =
"https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}";
private static string SECRET = "shhhhhhhhhhhhhhSecretTOken";
public bool Success { get; set; }
public List<string> ErrorCodes { get; set; }
public static bool Validate(string encodedResponse)
{
if (string.IsNullOrEmpty(encodedResponse)) return false;
var client = new System.Net.WebClient();
var googleReply = client.DownloadString(string.Format(URL, SECRET, encodedResponse));
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var reCaptcha = serializer.Deserialize<ReCaptcha>(googleReply);
return reCaptcha.Success;
}
}
你见过https://developers.google.com/recaptcha/docs/verify的ASHX和Ajax? – kichik
是的 - 但是不可见实现页面上的文档并不清楚是否需要验证,以及一些人们没有任何代码验证的示例(https://jsfiddle.net/jayh99/dp1cLh28/),而其他做(http://www.pinnacleinternet.com/installing-invisible-recaptcha/)所以 - 是否有必要? – user6383418
当然是。什么能阻止某人在没有它的情况下脚本化你的表单? – kichik