php – 在第三方调用WebHook中验证用户身份
作者:互联网
我有一个设置
>用户可能会也可能不会登录我的网站,
>用户将表单提交给第三方服务,并且
>第三方服务做了它的事情,然后在我的网站上调用“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();.我现在的问题是这是否是规范(和安全)的解决方案.
解决方法:
使用会话ID有助于跟踪谁发出请求并提供一些安全保护.
您还可以考虑向第三方提出每个请求:
>用于检测重放的随机数
>用于检测旧请求的时间戳
>每个请求发送一个digital-signature或hmac.您可以对可能被篡改的任何值进行签名/哈希,并在webhook中验证这些值
标签:php,authentication,security,webhooks,session,digital-signature,hmac 来源: https://codeday.me/bug/20190901/1786249.html