我有一个表单,其中操作是另一个网站上的脚本,我需要过滤掉垃圾邮件。我已经设置了recaptcha v2,并将表单操作更改为指向本地php文件,该文件已成功从recaptcha接收到“成功”或“失败”的响应。失败时,我使用php标头将访问者发送回他们来自的页面,但是成功时,我不知道下一步。获取我的POST数据并将其提交到外部网站的capture.php脚本的最佳方法是什么?
答案 0 :(得分:1)
您不会给我们太多帮助,但是由于现在是2019年,因此我假设您想通过API与其他网站进行交流。至少您要调用一个特定的脚本,该脚本知道该脚本是否存在并且可以接收来自您的呼叫(并且希望这样比较安全)。
您必须像浏览器一样向该站点发出请求。大多数服务器都带有CURL来发出请求。 PHP具有一个名为curl_exec()
的功能,用于检查here
如果您将严重依赖于对站点外部其他资源的调用,那么让其他人为您完成繁重的工作并引入第三方供应商库会更明智。我使用过但不赞成经过严格审查的一个是GuzzleHTTP doc。它们基本上为您包装了curl,并为您提供了标准的请求响应结构。
答案 1 :(得分:0)
我有一个表单,其中操作是另一个网站上的脚本,我需要过滤掉垃圾邮件。
基于此,我认为我的整个回答是您的真正问题是不允许机器人,自动脚本提交您的表单,因此我的答复没有显示如何将POST数据提交到另一个网站,而是向您显示了解决似乎是您真正的问题的选项。
将我的表单操作更改为指向本地php文件,该文件已成功从recaptcha接收到“成功”或“失败”的响应。失败时,我使用php标头将访问者发送回他们来自的页面,但成功时,我无法确定下一步。
任何攻击者都容易伪造这种方法。他们只需在浏览器中按F12键,即可查看您如何向用于验证reCaptcha v2的php脚本发出请求,然后使该过程自动化,从而轻松绕开了您的保护。
因此您要解决的仅允许人员提交表格的方法将行不通。
我已经设置了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
}
如果您使用的是框架,那么它应该已经对此内置了保护,只需阅读表单上的文档即可。否则,请阅读有关攻击的OWASP CSRF说明和OWASP CSRF Prevention Cheat Sheet,以了解如何防御。
OWASP报价:
跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在当前经过身份验证的Web应用程序上执行不需要的操作。
有关攻击的描述,请阅读OWASP XSS攻击描述,然后转到OWASP Prevention Chaeta Sheat,以了解如何防御。再者,如果您使用框架,它应该已经具有适当的工具来帮助您防止XSS攻击。
OWASP报价:
跨站点脚本(XSS)攻击是一种注入,其中恶意脚本被注入到原本良性和可信任的网站中。当攻击者使用Web应用程序将恶意代码(通常以浏览器脚本的形式)发送给其他最终用户时,就会发生XSS攻击。
因此,如果您想继续使用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
即可查看有多少服务,这将使攻击者能够继续以自动化方式运行脚本。