重新验证身份后如何将POST数据传递到外部站点?

时间:2019-01-14 12:44:22

标签: php forms recaptcha

我有一个表单,其中操作是另一个网站上的脚本,我需要过滤掉垃圾邮件。我已经设置了recaptcha v2,并将表单操作更改为指向本地php文件,该文件已成功从recaptcha接收到“成功”或“失败”的响应。失败时,我使用php标头将访问者发送回他们来自的页面,但是成功时,我不知道下一步。获取我的POST数据并将其提交到外部网站的capture.php脚本的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您不会给我们太多帮助,但是由于现在是2019年,因此我假设您想通过API与其他网站进行交流。至少您要调用一个特定的脚本,该脚本知道该脚本是否存在并且可以接收来自您的呼叫(并且希望这样比较安全)。

您必须像浏览器一样向该站点发出请求。大多数服务器都带有CURL来发出请求。 PHP具有一个名为curl_exec()的功能,用于检查here

如果您将严重依赖于对站点外部其他资源的调用,那么让其他人为您完成繁重的工作并引入第三方供应商库会更明智。我使用过但不赞成经过严格审查的一个是GuzzleHTTP doc。它们基本上为您包装了curl,并为您提供了标准的请求响应结构。

答案 1 :(得分:0)

我如何理解您的真正问题

  

我有一个表单,其中操作是另一个网站上的脚本,我需要过滤掉垃圾邮件。

基于此,我认为我的整个回答是您的真正问题是不允许机器人,自动脚本提交您的表单,因此我的答复没有显示如何将POST数据提交到另一个网站,而是向您显示了解决似乎是您真正的问题的选项。

表单动作重定向无法解决问题

  

将我的表单操作更改为指向本地php文件,该文件已成功从recaptcha接收到“成功”或“失败”的响应。失败时,我使用php标头将访问者发送回他们来自的页面,但成功时,我无法确定下一步。

任何攻击者都容易伪造这种方法。他们只需在浏览器中按F12键,即可查看您如何向用于验证reCaptcha v2的php脚本发出请求,然后使该过程自动化,从而轻松绕开了您的保护。

因此您要解决的仅允许人员提交表格的方法将行不通。

推荐使用reCaptcha V3

  

我已经设置了recaptcha v2

我建议使用Google reCaptcha V3,该代码将在后台运行,无需任何用户交互,并且返回的分数从0到1,其中分数朝1表示此人正在使用该页面,否则为自动化工具。

Google报价:

  

我们很高兴推出reCAPTCHA v3,它可以帮助您检测网站上的滥用流量,而不会引起用户的摩擦。它会根据与您网站的互动情况返回得分,并为您提供更大的灵活性以采取适当的措施。

重要

在您网站的所有页面中都包含reCaptcha V3,以便Google可以了解用户及其行为,从而使您对其人还是机器人更为自信。请记住,一旦它不提示用户进行交互,就不会影响网站任何页面上的用户体验。

始终在后端验证reCaptcha V3分数,以便知道是人类还是机器人在这么做,并相应地进行阻止。您甚至可能希望将此检查添加到其他后端端点,这些端点可能具有不希望被废弃的敏感数据。

根据Google docs,Google API针对服务器端reCaptcha V3验证的示例响应:

{
  "success": true|false,      // whether this request was a valid reCAPTCHA token for your site
  "score": number             // the score for this request (0.0 - 1.0)
  "action": string            // the action name for this request (important to verify)
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

进一步保护

跨站点请求伪造,称为CSRF

如果您使用的是框架,那么它应该已经对此内置了保护,只需阅读表单上的文档即可。否则,请阅读有关攻击的OWASP CSRF说明和OWASP CSRF Prevention Cheat Sheet,以了解如何防御。

OWASP报价:

  

跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在当前经过身份验证的Web应用程序上执行不需要的操作。

跨站点脚本也称为XSS

有关攻击的描述,请阅读OWASP XSS攻击描述,然后转到OWASP Prevention Chaeta Sheat,以了解如何防御。再者,如果您使用框架,它应该已经具有适当的工具来帮助您防止XSS攻击。

OWASP报价:

  

跨站点脚本(XSS)攻击是一种注入,其中恶意脚本被注入到原本良性和可信任的网站中。当攻击者使用Web应用程序将恶意代码(通常以浏览器脚本的形式)发送给其他最终用户时,就会发生XSS攻击。

继续使用reCaptcha V2

因此,如果您想继续使用reCaptcha V2,只需照常运行即可:

  • 阻止用户单击表单提交按钮,直到通过所有Google挑战为止。
  • 将表单指向处理表单提交的原始php脚本,并让其检查服务器端的reCaptcha V2。

根据Google docs,来自Google API的示例验证响应:

{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

请记住,可以绕过reCaptcha V2,只需在Google上搜索recaptcha v2 bypass即可查看有多少服务,这将使攻击者能够继续以自动化方式运行脚本。