Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何确保密码在客户端不可读?_Php_Javascript_Xmpp_Ejabberd - Fatal编程技术网

Php 如何确保密码在客户端不可读?

Php 如何确保密码在客户端不可读?,php,javascript,xmpp,ejabberd,Php,Javascript,Xmpp,Ejabberd,我需要将服务器上的用户名和密码传递给我的web聊天客户端javascript函数。当我通过javascript函数中的php代码发送用户名密码时,源代码中的用户就可以读取该用户名密码,这是有害的 请分享你的解决方案 我从客户端的服务器A获取用户名密码,然后将这些凭据提交给javascript函数,然后再连接到另一个服务器B。这就像facebook和gmail聊天工作一样,但他们如何将用户凭据传递给javascript客户端以连接聊天服务器在web上的任何地方都没有提到,希望这能更好地解释。不要在

我需要将服务器上的用户名和密码传递给我的web聊天客户端javascript函数。当我通过javascript函数中的php代码发送用户名密码时,源代码中的用户就可以读取该用户名密码,这是有害的

请分享你的解决方案


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

不要在Javascript中进行验证-在PHP代码中进行验证。

使用类似MD5的东西来存储密码,而不是使用相同的“加密”来传递密码


这样,只有用户才知道自己的密码,它不会被未加密地存储在任何地方。

JavaScript中发生的任何事情都会发生在浏览器上。这就是JavaScript被称为客户端语言的原因。人们永远不应该使用JavaScript进行常规用户不应该知道的验证或评估

相反,PHP(服务器端)可以用于这些评估,因为所有这些评估都发生在web服务器上,普通用户不知道幕后发生了什么


提示:使用AJAX和PHP可以提供应用程序所需的安全性和响应性。

很难从问题中看出您的目的,但看起来您希望限制客户端执行远程操作的方式

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

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

  • 检查客户端IP地址和用户代理
  • 只允许密钥使用一次(例如,将其使用存储在数据库中)
  • 允许在生成密钥时的时间限制内使用密钥
您应该始终假设任何客户端操作都可能被欺骗。

如果我正确理解了这个问题,那么这些问题可能正试图做类似的事情


或者,您可以执行一个ajax调用,在访问另一台服务器之前请求用户/pass。这样,它就不会出现在您的JavaScript代码中。

facebook和其他社交网站实现OAuth(开放授权)技术,以安全的方式实现跨站点凭据共享。
有关更多详细信息,请参阅。

只要您必须在浏览器上获取密码,用户就可以读取密码。 防止用户使用密码的唯一方法是永远不要将密码发送到浏览器

您也不应该使用简单的密码散列,因为这样用户就可以使用散列而不是密码登录聊天服务器,而您还没有解决任何问题

事实上,您也不应该在服务器上存储明文密码,您应该存储一个散列(最好是SHA-1,因为MD5已经被成功破坏)

你可以改为

  • [聊天服务器]生成、保存并发送到客户端
  • [客户端]将nonce发送到第一台服务器
  • [登录服务器]将密码散列加上nonce的散列a(SHA-1)发送回客户端
  • [客户端]将nonce和散列发送回聊天服务器
  • [聊天服务器]根据保存的列表检查nonce并将其删除以防止重播攻击,然后再次计算哈希值并检查它是否与从客户端获得的匹配

  • 为什么你真的希望它存储在客户端?如果您需要在客户端提供某种标识符,那么实际上将其保存在服务器端,只需在客户端提供一个非人类可读的标识符,更改该标识符将导致客户端希望访问的数据,而只有在用户有权访问的情况下,才会在服务器上对其进行评估。

    我向您保证,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