Persona's quick setup guide说我需要验证来自服务器的断言:
验证服务器上的断言是非常重要的,而不是在用户浏览器上运行的JavaScript中,因为这很容易伪造。
虽然我已经实现了它,但为什么我需要在服务器上执行它?我无论如何需要在这里将断言发送到Persona自己的服务器:https://verifier.login.persona.org/verify
如果我直接从浏览器发送断言,我只想知道什么是安全问题? 什么可以使用浏览器欺骗,为什么不能通过我自己的服务器发送相同的数据欺骗?
谢谢!
答案 0 :(得分:2)
问题并不在于您将断言直接从浏览器发送到验证服务,而是在此之后发生的事情。
如果服务器是执行验证的服务器(通过将其发送到verifier.login.persona.org
),则它知道断言有效,因为它自行检查。恶意用户无法拦截和篡改服务器与验证服务之间的通信。因此,服务器可以为用户创建会话并设置cookie。这一切都很好。
另一方面,如果客户端正在进行验证,那么会话是如何创建的?也许客户端代码检查断言是否有效,然后在服务器上调用/create_session
?这里的问题是服务器需要相信当客户端要求创建会话时,它实际上已经完成了检查。
用户浏览器中运行的客户端代码无法信任,因为用户可以轻松更改(例如使用开发人员工具)。因此,当您向我发送正确检查断言的JavaScript代码时,我可以修改该检查以跳过断言检查,并在要求创建新会话时欺骗您的服务器。