【问题标题】:validate reCAPTCHA Key验证 reCAPTCHA 密钥
【发布时间】:2016-11-16 09:19:08
【问题描述】:

我正在尝试找出清理和验证 reCAPTCHA 密钥的最佳方法。问题是我没有很多关于它们的密钥是如何形成的信息。我认为最好的方法可能是检查字符串是否长 40 个字符并包含字母、数字、破折号和下划线。这是我从文档中获得的信息。

invalid-site-public-key:您是否确保复制了整个密钥,包括所有连字符和下划线,但没有任何空格?密钥的长度应正好为 40 个字母。 Source

我的公钥看起来像这样6Ler570SAAAAAOfjh3CNFPtuBSH_QdavHc5x_JUv 我只是担心编写过于严格的验证,不会让某些人使用我正在编写的插件。

这是我现在正在使用的,但不确定是否有更好的方法。

if( $recaptcha_public_key ) {
    //validate the key
        $recaptcha_public_key = filter_var($recaptcha_public_key, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/[0-9a-zA-Z_-]{40}/")));
    // Update value in database
    update_option( 'recaptcha_public_key', $recaptcha_public_key );
}

谢谢!

【问题讨论】:

    标签: php regex captcha recaptcha


    【解决方案1】:

    您所拥有的 ("/[0-9a-zA-Z_-]{40}/") 与您将获得的一样严格。关键是它是随机的——如果它符合一套严格的格式规则,它很容易被破解。

    在不分析一组公钥的情况下,可以公平地假设每个字符在集合[0-9a-zA-Z_-] 中是完全随机的。即使这是不正确的假设并且存在一些更具体的模式,这也可能在未来的某个时候发生变化,因此将您的应用程序提交到当前模式并不是一个好主意。

    【讨论】:

      【解决方案2】:

      为什么要自己验证?您没有用信息访问您的数据库或在页面上显示它吗?如果您将它放在页面上,则对其进行 html 编码,这应该会阻止脚本运行。

      您应该使用http://www.google.com/recaptcha/api/verify 将其发送给第三方,它会验证它(如http://code.google.com/apis/recaptcha/docs/verify.html 中所述)。

      【讨论】:

      • 我正在为 YOURLS 创建一个插件,在管理页面上,我让用户输入他们存储在数据库中的私钥和公钥,直到我需要检索密钥以验证验证码。
      【解决方案3】:

      这似乎是完美的

      if(preg_match('#^6[0-9a-zA-Z_-]{39}$#', $key)){
          // Valid key
      }
      

      这些是键的当前状态:

      • 40 个字符
      • 以“6”开头
      • 只有字母数字、下划线和破折号 字符

      【讨论】:

      • 感谢您的回答。但是,密钥并不总是以 6 开头,这只是一个示例。虽然我知道您的回答主要是围绕我确实想提及的正则表达式验证,因为这个问题现在已经有 6 年历史了,但 Google/reCAPCHA 不再使用 Secret Token Validation。相反,他们使用Domain Name Validation
      • 哦,我明白了,前几天我在测试它,它可以工作,但我猜那是因为域名。谢谢(你的)信息;是时候让我做一些更新了:)
      • 我刚刚回顾了一下,似乎两个键仍在使用中。
      猜你喜欢
      • 2020-10-23
      • 2014-05-14
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多