【问题标题】:Can Google reCaptcha Validation Fail?Google reCaptcha 验证会失败吗?
【发布时间】:2017-03-26 16:34:01
【问题描述】:

我在这里问了一个理论上可能很愚蠢的问题,但是我真的很想知道答案。现在我正在使用 Django 编写一个带有 Google reCaptcha 的网站,以防止垃圾邮件填写表格。我设置了一个js来避免跳过Google reCaptcha,这样每次提交都会显示“我不是机器人”的消息。

我的问题是,如果表单上的提交已经被证明不是垃圾邮件(不是机器人),那么为什么我必须在 views.py 中编写语法来验证具有与站点密钥匹配的密钥的 Google reCaptcha ?在什么情况下垃圾邮件提交可以通过谷歌reCaptcha而不是通过后端验证?

如果您想参考我在做什么,我附上我的代码,尽管这是一个纯粹的理论问题。非常感谢。

模板:

<form id="contact_form" class="form-horizontal" method="post" action="{% url 'contact' %}">
    {% csrf_token %}



<div class="form-group">
    <span id="name_err" style="color:red; bold: false; font-size:1vw; padding-left:1vw; display:none">Please enter your name</span>
    <label class="control-label col-sm-2" for="name">Name:</label>
    <div class="col-sm-10">
        <input type="text" class="form-control" id="name" name="name" placeholder="Enter name here">
    </div>
</div>
<script src='https://www.google.com/recaptcha/api.js'></script>
<div style="padding-left: 11vw;" class="g-recaptcha" data-sitekey="xxx"></div><br>
<div style="padding-left: 11vw;" id="submit-div"><input type="submit" value="post" class="btn btn-primary"></div>   

views.py

if request.method == 'POST':

contact_name = request.POST.get('name')
contact_email = request.POST.get('email')
contact_subject = request.POST.get('subject')
contact_message = request.POST.get('message')
recaptcha_response = request.POST.get('g-recaptcha-response')

url = 'https://www.google.com/recaptcha/api/siteverify'
values = {
    'secret': settings.GOOGLE_RECAPTCHA_SECRET_KEY,
    'response': recaptcha_response
}            
data = urllib.parse.urlencode(values).encode()
req =  urllib.request.Request(url, data=data)
response = urllib.request.urlopen(req)
result = json.loads(response.read().decode())
''' End reCAPTCHA validation '''

【问题讨论】:

    标签: django forms recaptcha


    【解决方案1】:

    我不完全确定您在问什么,但是您正在验证响应对您的网页有效,用户可能已经从另一台服务器获得了 reCaptcha 响应,然后将其插入到您的表单提交中。

    recaptcha_response 可能是有效响应,但不适用于您的网站,这就是您要检查的内容。我希望这会有所帮助。

    【讨论】:

    • 有道理,谢谢。但是将有效的recaptcha_response 植入网站是否容易?
    • 对您的站点有效的编号。
    猜你喜欢
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2021-03-20
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多