如何保护密码不被客户端读取?

Moh*_*lid 8 javascript php xmpp ejabberd

我需要将服务器上的用户名和密码传递给我的网络聊天客户端javascript函数.当我通过我的PHP代码在javascript函数中发送用户名密码时,它对源中的用户来说是可读的,这是有害的.

请分享您的解决方案.

我从客户端的服务器A获取用户名密码,然后将这些凭据提交给javascript函数,然后连接到另一台服务器B.它就像facebook和gmail聊天工作,但是他们如何将用户凭据传递给他们的javascript网络上的任何地方都没有提到连接到聊天服务器的客户端,希望这更好地解释.

Sla*_*ppy 18

我向你保证这不是facebook和gtalk的做法.通常,他们处理支持第三方API开发(OAuth)的协议,该协议允许用户授予或拒绝应用程序使用其帐户.客户端应用程序在任何时候都不知道用户的凭据.这就是OAuth很受欢迎的原因.

您有几个选项,但我认为基于声明的身份验证是最好的方法.基本上,服务器A用于验证客户端并在系统中修饰其角色.这是通过HTTPS提供的加密cookie,以防止火灾羊型攻击.一旦在客户端上,服务器B可以询问该cookie以获得用户被授权在服务器B上执行的角色,如果加密则服务器B必须知道如何解密cookie.根据您的技术堆栈,有几个库可以支持这一点.同样重要的是要注意随时饼干(或任何与此有关的安全令牌)发射的,所以必须通过HTTPS发生其他有效载荷可以通过不安全的无线网络被截获.

编辑:根据我对该问题的评论,如果您正在使用XMPP,那么您可能会发现只需通过HTTPS对您的XMPP库进行身份验证即可.


sev*_*cat 13

不要在Javascript中进行验证 - 在PHP代码中执行此操作.

  • 为什么不能通过PHP的curl对聊天服务器发送帖子请求来验证用户? (4认同)

dav*_*010 8

很难从问题中判断出你的目标是什么,但看起来你想要限制客户端执行远程操作的方式.

您可以尝试让客户端向服务器请求授权密钥并让服务器在特定条件下接受密钥,而不是发送用户名和密码.

然后,您可以通过以下方式限制密钥的使用:

  • 检查客户端IP地址和用户代理
  • 允许密钥只使用一次(例如将其用于数据库中)
  • 允许在生成密钥的时间限制内使用密钥

您应始终假设任何客户端操作都可能被欺骗.

如果我正确地理解了这个问题,这些SO问题可能会尝试做类似的事情.