我有一个设置
- 用户可能会也可能不会登录到我的网站,
- 用户向第三方服务提交表单,并且
- 第 3 方服务做它的事,然后在我的网站上调用一个“webhook”,转发所有
$_POST
数据。
所以,为了说明:
+---------------------+ +---------------------------+
| mysite.com/form.php |-------->| thirdparty.com/submit.php |
+---------------------+ +---------------------------+
|
v
+---------------------------+
| mysite.com/webhook.php |
+---------------------------+
如果用户在提交表单时已登录,那么我如何在 webhook 中告知和验证这一事实?
例如,我可以天真地设置一个隐藏字段,
<input type="hidden" name="loggedOn" value="true" />
但是任何人都可以欺骗它。我想我可能会通过用户的密码哈希,
<input type="hidden" name="passwordHash" value="$2a$08$Lg5XF1Tt.X5TGyfb43vBBeEFZm4GTXQhKQ6SY6emkcnhAGT8KfxFS" />
有效地使 webhook 再次“登录”,但这不可能是正确的,因为它会将用户的密码哈希暴露给客户端。
我认为必须有更好的方法来使用会话机制来做到这一点,但我是会话新手。也许我错过了适当的词汇?有人会引导我朝着正确的方向前进吗?谢谢!
编辑:
sid
经过进一步研究,我认为正确的方法是为会话 id设置一个隐藏的表单字段session_id()
,以便将其传递给 webhook,而 webhook 又将使用会话 id 继续会话session_id($_POST['sid']); session_start();
。我现在的问题是这是否是规范(和安全)的解决方案。