【问题标题】:Messenger bot, safety of parsing user ID to a webview URL as a parameterMessenger bot,将用户 ID 解析为 webview URL 作为参数的安全性
【发布时间】:2018-02-09 20:20:31
【问题描述】:

我目前正在构建一个使用菜单扩展程序的食品订购 Messenger 机器人,因为它是一种在餐厅菜单中浏览和选择的更快方法,而不是使用轮播或列表以及关于数量的重复问题。

但是,目前使用扩展程序仅限于移动用户。使用扩展(而不是普通的网络视图)来获取用户信使 ID 以确定哪个用户正在下订单。我想到了切换到常规 Web 视图以允许桌面用户使用该机器人的想法,因为目前信使在框架中而不是在新选项卡中打开 Web 视图,但这意味着唯一的方法是确定哪个用户正在订购是将用户 ID(机器人的数据库用户表 ID,而不是信使 ID)作为菜单的 URL 参数传递。

我的问题是,这样做有多安全,甚至是个好主意吗?

【问题讨论】:

    标签: webview facebook-messenger url-parameters facebook-messenger-bot userid


    【解决方案1】:

    这取决于用户 ID 的敏感程度。如果访问您的数据库的 API 得到适当保护,那么这应该不是问题,因为仅使用用​​户 ID 无法提取个人身份信息。

    如果您想要真正安全并且根本不从数据库中公开用户 ID,您可以将来自 Messenger 的 PSID 存储在用户数据库记录中,然后发送并进行查找。

    所以,我想简短的回答是,它与通过 HTTP 传递的任何东西一样安全或不安全,因为 Messenger 中的 webview 是一个普通的 webview。

    【讨论】:

    • 到目前为止,以这种方式获取用户 ID,意味着任何人都可以作为该用户下订单,但是答案/对话将继续与真正的用户进行(因为它将匹配它的信使 ID )。所有其他操作都需要验证(来自餐厅工作人员)。
    • 在我看来,如果仅用户 ID 允许某人下订单,您就会遇到更大的安全问题。
    【解决方案2】:

    首先,尽管在您发布问题时情况可能有所不同,但 Messenger 扩展现在绝对可以在 Messenger 的桌面版本上运行(无论是直接从桌面使用 messenger.com 时,还是使用 Messenger 版本时)嵌入在 facebook.com 中)。也就是说,我建议使用 Content-Security-Policy 指令来允许 messenger.com 和 facebook.com 将您的 web 视图显示为浏览器中的框架,而不是 Facebook 在https://developers.facebook.com/docs/messenger-platform/webview/extensions#webview_on_web 推荐的 X-Frame-Options . X-Frame-Options 强制您选择一个域(messenger.com 或 facebook.com)以允许您的 webview 出现,而​​使用 Content-Security-Policy 您可以同时允许两者。

    其次,值得指出的是,即使使用 Messenger Extensions,如果您没有使用 signed_request 验证传入数据,那么任何人都可以以该用户的身份欺骗订单。 https://developers.facebook.com/docs/messenger-platform/webview/context#signed 的说明描述了如何验证来自 getContext() 的传入信息,以确保信息确实来自 Messenger。

    【讨论】:

    • 我确实注意到现在可以在桌面上打开扩展,但是,上次我尝试时,您无法在桌面上使用扩展 SDK 获取用户 ID。
    • 您可以通过传递给成功回调的 thread_context 从 MessengerExtensions.getContext() 获取页面范围的用户 ID:请参阅 developers.facebook.com/docs/messenger-platform/reference/…
    猜你喜欢
    • 2016-11-27
    • 2017-09-04
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2014-02-17
    • 2010-12-03
    • 1970-01-01
    相关资源
    最近更新 更多