Php 如何确保密码在客户端不可读?
我需要将服务器上的用户名和密码传递给我的web聊天客户端javascript函数。当我通过javascript函数中的php代码发送用户名密码时,源代码中的用户就可以读取该用户名密码,这是有害的 请分享你的解决方案Php 如何确保密码在客户端不可读?,php,javascript,xmpp,ejabberd,Php,Javascript,Xmpp,Ejabberd,我需要将服务器上的用户名和密码传递给我的web聊天客户端javascript函数。当我通过javascript函数中的php代码发送用户名密码时,源代码中的用户就可以读取该用户名密码,这是有害的 请分享你的解决方案 我从客户端的服务器A获取用户名密码,然后将这些凭据提交给javascript函数,然后再连接到另一个服务器B。这就像facebook和gmail聊天工作一样,但他们如何将用户凭据传递给javascript客户端以连接聊天服务器在web上的任何地方都没有提到,希望这能更好地解释。不要在
我从客户端的服务器A获取用户名密码,然后将这些凭据提交给javascript函数,然后再连接到另一个服务器B。这就像facebook和gmail聊天工作一样,但他们如何将用户凭据传递给javascript客户端以连接聊天服务器在web上的任何地方都没有提到,希望这能更好地解释。不要在Javascript中进行验证-在PHP代码中进行验证。使用类似MD5的东西来存储密码,而不是使用相同的“加密”来传递密码
这样,只有用户才知道自己的密码,它不会被未加密地存储在任何地方。JavaScript中发生的任何事情都会发生在浏览器上。这就是JavaScript被称为客户端语言的原因。人们永远不应该使用JavaScript进行常规用户不应该知道的验证或评估 相反,PHP(服务器端)可以用于这些评估,因为所有这些评估都发生在web服务器上,普通用户不知道幕后发生了什么
提示:使用AJAX和PHP可以提供应用程序所需的安全性和响应性。很难从问题中看出您的目的,但看起来您希望限制客户端执行远程操作的方式 您可以尝试让客户端向服务器请求授权密钥,并让服务器在特定条件下接受密钥,而不是发送用户名和密码 然后,您可以通过以下方式限制密钥的使用:
- 检查客户端IP地址和用户代理
- 只允许密钥使用一次(例如,将其使用存储在数据库中)
- 允许在生成密钥时的时间限制内使用密钥
有关更多详细信息,请参阅。只要您必须在浏览器上获取密码,用户就可以读取密码。 防止用户使用密码的唯一方法是永远不要将密码发送到浏览器 您也不应该使用简单的密码散列,因为这样用户就可以使用散列而不是密码登录聊天服务器,而您还没有解决任何问题 事实上,您也不应该在服务器上存储明文密码,您应该存储一个散列(最好是SHA-1,因为MD5已经被成功破坏) 你可以改为
为什么你真的希望它存储在客户端?如果您需要在客户端提供某种标识符,那么实际上将其保存在服务器端,只需在客户端提供一个非人类可读的标识符,更改该标识符将导致客户端希望访问的数据,而只有在用户有权访问的情况下,才会在服务器上对其进行评估。我向您保证,facebook和gtalk去做吧。通常,它们处理支持第三方API开发(OAuth)的协议,该协议允许用户授予或拒绝应用程序使用其帐户。客户端应用程序在任何时候都不知道用户的凭据。这就是OAuth受欢迎的原因 这里有几种选择,但我认为基于声明的身份验证是最好的方法。基本上,服务器A用于验证客户机并修饰其在系统中的角色。这被用作HTTPS上的加密cookie,以防止fire sheep类型的攻击。一旦进入客户机,服务器B可以查询此cookie,以获取用户有权在服务器B上执行的角色,如果已加密,则服务器B必须知道如何解密cookie。根据您的技术堆栈,有多个库支持此功能。同样重要的是要注意,每当传输cookie(或任何安全令牌)时,都必须通过HTTPS进行传输,否则负载可能会通过不安全的无线网络被截获
编辑:根据我对这个问题的评论,如果您使用的是XMPP,那么您可能会发现使用XMPP库通过HTTPS进行身份验证就足够了。我认为最好是通过PHP发送 但是你想特别使用JS,所以我可以提供一些东西 对密码进行编码,md5();如果您认为它不安全,请尝试多层加密,如md5(sha1(sha1())等,并将密码以加密方式保存到数据库中,以确保您和用户的安全。因此,您可以使用不同的名称或别名(如“fun”)以加密方式发送密码,以防人们知道它是密码 另外,您可以使用PHP使用密码授权用户,而不用发送密码,只需使用JS传递密码即可
sha1(sprintf("%s%s",salt,hash_from_db))
sha1(sprintf("%s%s",salt, hash_func_as_on_srv(password))) == sha1_recieved_from_server