保护PHP脚本免受csrf ...没有PHP会话(跨站点)

时间:2016-05-26 07:46:11

标签: php session cross-domain csrf

我有一个将POST数据发布到PHP脚本的公共表单。

此表单不在同一个域中,也不使用PHP,因此无法围绕PHP会话构建保护。

目标是只允许 此表单在那个 PHP脚本上发布。

How do I provide more security for checking source of the request讲述了如何使用PHP会话实现CSRF保护,但我想知道如何在没有它的情况下保护我的保护?有可能吗?

1 个答案:

答案 0 :(得分:1)

与GET请求相比,POST请求更难以伪造,所以你有这样做,这很好。只需确保您的脚本中没有使用$ _REQUEST。

你不能在这里使用会话,但原则是相同的 - 你必须实现某种"握手"在表单和PHP脚本之间。如果会议不是一种选择,有几种不同的方法。

最简单的方法是检查http引用。如果表单位于http并且脚本位于https下,则无法使用,也可以使用打开的重定向漏洞进行克服。

另一种方法是验证码。我知道,这些天不是用户友好或时尚,但这会使请求伪造更加困难,因为黑客无法在没有任何用户输入的情况下在幕后进行他的漏洞利用工作。您应该查看reCAPTCHA(谷歌' s"我不是机器人"复选框):https://www.google.com/recaptcha/intro/index.html

这是一个棘手的情况,因为一个主机上的表单和另一个主机上的脚本本身基本上是CSRF,所以你想允许它,但只允许一个主机。在这里,没有任何用户交互的完全安全性可能是不可能的,所以只是尽量让一个潜在的黑客弄乱你的脚本,或者在UX方面受苦。我个人会选择reCAPTCHA。