将用户名/密码安全地传递给另一个javascript文件

将用户名/密码安全地传递给另一个javascript文件,javascript,socket.io,Javascript,Socket.io,我正在运行Socket.IO,让服务器部分通过mysql查询(在js中运行)确认用户名和密码,这非常有效。我的问题是:是否可以将客户端的用户名/密码从客户端javascript安全地发送到服务器javascript文件?没有用户能够看到密码?密码已经被散列(通过PHP),但我不希望他们有散列,以便能够解密 //编辑 经过进一步的讨论,我同意在脚本之外的任何地方发送散列密码都是不好的。是否有另一种方法可以唯一标识用户并通过javascript传递这些变量,以便我的服务器js文件可以对其进行身份验证

我正在运行Socket.IO,让服务器部分通过mysql查询(在js中运行)确认用户名和密码,这非常有效。我的问题是:是否可以将客户端的用户名/密码从客户端javascript安全地发送到服务器javascript文件?没有用户能够看到密码?密码已经被散列(通过PHP),但我不希望他们有散列,以便能够解密

//编辑


经过进一步的讨论,我同意在脚本之外的任何地方发送散列密码都是不好的。是否有另一种方法可以唯一标识用户并通过javascript传递这些变量,以便我的服务器js文件可以对其进行身份验证(无需密码)?

用户身份验证的一种典型方法是用户通过SSL提供用户名/pwd。这与服务器上的凭据相比较(通常通过一些散列算法,如您所述)。如果验证了凭据,则服务器将为该用户创建会话ID。会话ID临时存储在服务器上的某个位置,并以cookie的形式返回给客户端。所有后续web请求都将验证cookie中是否存在对此用户有效的会话ID。如果是这样,那么它仍然是正确的用户

会话ID与用户的实际凭据无关,每次用户登录时会话ID都应该不同,这样使用会话ID的用户凭据就不会有长期风险。相反,会话ID只是一个临时令牌,它是发给浏览器的,该浏览器正确提供了用户凭据,以便服务器能够知道(在后续页面请求中)这些请求来自“登录”用户

如果会话ID被盗(通过中间人窥探或类似方式),则具有会话ID的任何人都可以临时访问该帐户。因此…如果您认为会话ID需要保护,则需要为初始身份验证和使用会话ID的所有后续页面访问提供SSL


会话ID可以是暂时的(在一段时间后过期)服务器可以在任何时候撤销一个证书,只需拒绝接受它作为已验证会话的指示。在这方面,它比使用任何真实且持久的凭据作为安全登录的重复指示要简单/安全得多。

如果他们解密哈希,他们会很有天赋。对,我使用的是sha512哈希wi在php中,虽然我认为我的任何用户能够知道散列是什么的想法都会带来安全风险。虽然用户知道他们自己的散列并不坏(毕竟,你用每个用户唯一的一种盐来盐每个散列),如果这意味着要在其他地方进行身份验证,那么传递此哈希将是不好的,除非您通过安全通道HTTPS传递。啊,我同意@Konerak,我用另一种可能的方式修改了我的问题。我知道您要去哪里。因此,如果我要通过javascript传递会话id,我如何再次进行验证st MySQL?我想我可以为session_id添加一个字段,并在用户每次登录时将其保存到数据库中?或者有更好的方法来处理这个问题吗?@EdR-如何在服务器上存储会话id取决于您自己,最好的方法是什么,这在很大程度上取决于应用程序的实现。将其存储在数据库中可能是最简单的处理方法注意,存储它的方式可能会影响任何给定用户是否有多个会话同时处于活动状态。将它存储在数据库中是可以的-您将查询数据库中的每个页面视图-但您可能已经这样了。使用memcached之类的工具,您可以很容易地将其从数据库中移出。