我公司的成员比我自己更高,拒绝在他的网站上使用recaptcha.net来阻止公共表单上的垃圾邮件.他认为,任何来我们网站的人都很难输入他们的信息,因为图灵测试"非常难以阅读".
是否有使用此方法的替代方法? 那不包含这些难以阅读的图像吗?
(好吧愚蠢的问题......如果由我决定,我们会使用recaptcha,因为地球上的其他人都会这样做......但我只是觉得我还是要检查一下.)
此外,使用由Javascript设置的隐藏字段,以后在服务器上检查真的是一个很好的方法来解决垃圾邮件?
我自己并不真的买它是...因为有各种各样的Javascript引擎不能在浏览器中运行但可以运行Javascript(Rhino等...),这很容易被用来解决JS问题/ Serverside反垃圾邮件方法.
有没有人在他们的iPhone应用程序上使用reCaptcha?我想弄清楚如何将它嵌入我的应用程序...
我在一个网站(不是Wordpress网站或Joomla)中安装了Google Recaptcha所以不要提供任何WP插件或Joomla扩展:)
我的问题是,该网站是响应式的,而recaptcha则不是.当我使用Firebug查找其样式时,我意识到不仅Google提供的库不包含css文件,而且我无法在custom-styles.css文件中覆盖它们,因为Google非常周到地应用了!important选择器hack在他们的CSS中一切,但我甚至尝试对它进行分类,以便我可以做出违规并希望覆盖Google的样式但是插件不起作用:(
有任何想法吗?
ps我也没有使用不同的重新验证码.抱歉.我敢肯定这里有一些收藏极客;)
这是HTML.这就是recaptcha.php从服务器呈现的内容.这不是我在实际PHP页面中所拥有的...(没有CSS,这是主要问题)
<div id="recaptcha_widget_div" style="" class=" recaptcha_nothad_incorrect_sol recaptcha_isnot_showing_audio"><div id="recaptcha_area"><table id="recaptcha_table" class="recaptchatable recaptcha_theme_red">
<tbody>
<tr>
<td colspan="6" class="recaptcha_r1_c1"></td>
</tr>
<tr>
<td class="recaptcha_r2_c1"></td>
<td colspan="4" class="recaptcha_image_cell">
<center><div id="recaptcha_image" style="width: 300px; height: 57px;">
<img id="recaptcha_challenge_image" alt="reCAPTCHA challenge image" height="57" width="300" src="http://www.google.com/recaptcha/api/image?c=03AHJ_VutTaFjCI-gV3f3W2_M6gix7arVpF-9EOz-f773U5LmDrl33mKCn9wMXYGe0t8-xy-1HD0ysHzOI_NYyOtxOxD_a4Jj5G5h4bDMalKBQ5PDJaaE6ur8K44ilzimisHHYX6xZJ4y9xeuP6lT4vQa59-nNPju3VrlolnYgbM6oKgD7el1Rr9cpbRojjc_2zFraHkTjxyUU"></div>
</center>
</td>
<td class="recaptcha_r2_c2"></td>
</tr>
<tr>
<td rowspan="6" class="recaptcha_r3_c1"></td>
<td colspan="4" class="recaptcha_r3_c2"></td>
<td rowspan="6" class="recaptcha_r3_c3"></td>
</tr>
<tr>
<td rowspan="3" class="recaptcha_r4_c1" height="49">
<div class="recaptcha_input_area">
<span id="recaptcha_challenge_field_holder" style="display: none;">
<input type="hidden" name="recaptcha_challenge_field" id="recaptcha_challenge_field" value="03AHJ_VutTaFjCI-gV3f3W2_M6gix7arVpF-9EOz-f773U5LmDrl33mKCn9wMXYGe0t8-xy-1HD0ysHzOI_NYyOtxOxD_a4Jj5G5h4bDMalKBQ5PDJaaE6ur8K44ilzimisHHYX6xZJ4y9xeuP6lT4vQa59-nNPju3VrlolnYgbM6oKgD7el1Rr9cpbRojjc_2zFraHkTjxyUU"></span>
<input name="recaptcha_response_field" …Run Code Online (Sandbox Code Playgroud) https://developers.google.com/recaptcha/docs/verify
if(isset($_POST['submit'])){
$recaptchaResponse = $_POST['g-recaptcha-response'];
$secretKey = 'MYKEY';
$request = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$recaptchaResponse);
if(!strstr($request,"false")){
echo '<div class="notification error clearfix"><p><strong>Attention!</strong> You didnt complete the captcha.</p></div>';
exit();
Run Code Online (Sandbox Code Playgroud)
然后其余的php文件邮寄表单,但即使你没有完成recaptcha它也只是发送.基本上,如果JSON返回false,我希望它不会发送并显示错误
如果它有帮助,这里也是页面的形式,我也可能在那里做错了...
<form method="POST" action="post.php" name="contactform" id="contactform" class="container">
<fieldset>
<div class="form-field grid-half">
<label for="name">Name</label>
<span><input type="text" name="name" id="name" /></span>
</div>
<div class="form-field grid-half">
<label for="email">Email</label>
<span><input type="email" name="email" id="email" /></span>
</div>
<div class="form-field grid-full">
<label for="message">Message</label>
<span><textarea name="message" id="message"></textarea></span>
</div>
<div class="form-field grid-full">
<div class="g-recaptcha" data-sitekey="MYKEY"></div>
</div>
</fieldset>
<div class="form-click grid-full">
<span><input type="submit" name="submit" value="Submit" id="submit" /></span> …Run Code Online (Sandbox Code Playgroud) 我有以下内容 <body>
<div class="g-recaptcha" data-sitekey="some-key (original is right)">
Run Code Online (Sandbox Code Playgroud)
这是我的 <head>
<script src="//www.google.com/recaptcha/api.js"></script>
Run Code Online (Sandbox Code Playgroud)
但无论是在firefox还是chrome上都没有显示......这是一个已知的问题吗?
我有一个ajax形式:
<form id="my_form">
<input type="text" id="field1" />
<input type="submit" value="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
和js代码:
document.getElementById("my_form").onsubmit = function(e) {
e.preventDefault();
var xhr = new XMLHttpRequest();
//.............. send request to a server
Run Code Online (Sandbox Code Playgroud)
在文档中,它假定表单是普通表单,而不是ajax.我究竟应该如何将隐形reCaptcha整合到我的ajax表单中?例如:
<form id="my_form">
<input type="text" id="field1" />
<div class="g-recaptcha" data-sitekey="12345" data-callback="????></div>
<input type="submit" value="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
而且,特别是,我应该为"数据回调"处理程序指定什么?同样,在文档中,数据回调提交了一个表单,但是一个普通表单,而我的是ajax.我需要"数据回调"吗?我不应该在我的处理程序中调用recaptcha吗?怎么样?
有"渲染","getResponse"和"执行".我应该使用哪一个?从文档中不清楚.
我在我的表单(HTML5)中使用google的新recaptcha:https: //www.google.com/recaptcha
在表单提交之前,有没有办法在需要时检查并标记recaptcha?我想在客户端而不是服务器端验证这一点.这样,我不必回到表单并警告用户不要为验证码输入任何内容.
我可以用来检查用户是否在recaptcha中输入任何内容的任何javascript?
我正在尝试使reCAPTCHA与严格的内容安全策略一起工作.这是我的基本版本,它可以正常工作:
HTML
<script src='//www.google.com/recaptcha/api.js' async defer></script>
Run Code Online (Sandbox Code Playgroud)
HTTP标头
Content-Security-Policy: default-src 'self'; script-src 'self' www.google.com www.gstatic.com; style-src 'self' https: 'unsafe-inline'; frame-src www.google.com;
Run Code Online (Sandbox Code Playgroud)
但是,我想摆脱unsafe-inline该style-src部分.在文档中,写道:
我们建议使用CSP3中记录的基于随机数的方法.确保将你的随机数包含在reCAPTCHA api.js脚本标记中,我们将处理其余部分.
但是我不能让它工作......这就是我尝试过的:
HTML
<script src='//www.google.com/recaptcha/api.js' nonce="{NONCE}" async defer></script>
Run Code Online (Sandbox Code Playgroud)
HTTP标头
Content-Security-Policy: default-src 'self'; script-src 'self' https: 'nonce-{NONCE}'; style-src 'self' 'nonce-{NONCE}'; child-src www.google.com;
Run Code Online (Sandbox Code Playgroud)
这是我在Chrome 53上遇到的错误:
拒绝应用内联样式,因为它违反了以下内容安全策略指令:"style-src'self'https:'nonce- {NONCE}'".可以使用'unsafe-inline'关键字,散列('sha256-MammJ3J + TGIHdHxYsGLjD6DzRU0ZmxXKZ2DvTePAF0o =')或nonce('nonce -...')来启用内联执行.
我错过了什么?
我试图在组件中使用vue.js进行recaptcha回调.验证码本身确实有效,但不是我在data-callback属性中定义的回调.
我已经尝试了我能想到的一切,但我仍然得到ReCAPTCHA couldn't find user-provided function: dothisthat错误.
这是组件
<script>
function dothisthat (){
alert(312);
}
</script>
<template>
<div class="well main-well">
<h4>Captcha</h4>
<p class="small">You must complete the captcha to finish your booking.</p>
<div id="captcha-wrapper">
<div class="g-recaptcha" :data-sitekey="captchaKey" data-callback="dothisthat"></div>
</div>
</div>
</template>
<script>
function dothisthat (){
alert(123);
}
import * as filters from '../../../filters';
import Translation from '../../../Translation';
export default {
name: 'Captcha',
props: {
},
computed: {
captchaKey: function() {
return this.$store.getters.captcha;
}
},
methods: {
dothisthat: function(){ …Run Code Online (Sandbox Code Playgroud) 当我显式渲染Recaptcha v2然后在从DOM中删除它之前重置它,大约40秒后我在浏览器控制台中出错.
我有一个可以用来重现问题的JSFiddle.
这是相关的代码摘录:
const recaptchaHolder = document.getElementById('...');
const recaptchaWidgetId = grecaptcha.render(recaptchaHolder, {/*...*/});
// then later
grecaptcha.reset(recaptchaWidgetId);
recaptchaHolder.parentElement.removeChild(recaptchaHolder);
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
未知(承诺)超时
使用以下stacktrace(实际的堆栈跟踪可能会有所不同,因为它发生在严重缩小的代码中):
setTimeout (async)
J @ recaptcha__en.js:100
(anonymous) @ recaptcha__en.js:285
tb @ recaptcha__en.js:284
mj @ recaptcha__en.js:456
(anonymous) @ recaptcha__en.js:458
Run Code Online (Sandbox Code Playgroud)
我试图利用文档中的'error-callback'参数来捕获此错误,但这没有帮助 - 错误仍未被捕获,并且不会调用此回调.
另一个观察:如果我grecaptcha.reset在从DOM中删除元素之前省略调用,则不会发生错误.但是,它可能会导致UI不一致:如果用户受到recaptcha的挑战(例如,使用图像),并且只是从DOM中删除元素而不调用grecaptcha.reset,则不会从DOM中清除挑战HTML.
我正在寻找处理上述错误或以不同方式处理recaptcha删除的方法(如果我现在做错了)