Javascript Web中的安全身份验证

Javascript Web中的安全身份验证,javascript,php,security,authentication,web,Javascript,Php,Security,Authentication,Web,我正在以以下方式在网页上使用身份验证: 用户写入其密码(仅密码-它们在数据库中是唯一的),并作为SHA-3发送到服务器。系统在数据库中搜索该散列,如果找到,则将用户名称写入会话。用户被重定向到主页面 因此,每次主页检查会话时,如果未设置会话,则会将用户发送到身份验证页面 检查会话值访问页面是否安全? 是否可以创建假冒会话来访问该页面?我建议阅读有关会话管理的文章 由于HTTP是无状态的,会话需要由应用程序实现。你的方法与通常的做法相差不远 凭证在前端被询问,并作为POST参数发送。此连接受SSL

我正在以以下方式在网页上使用身份验证:

用户写入其密码(仅密码-它们在数据库中是唯一的),并作为SHA-3发送到服务器。系统在数据库中搜索该散列,如果找到,则将用户名称写入会话。用户被重定向到主页面

因此,每次主页检查会话时,如果未设置会话,则会将用户发送到身份验证页面

检查会话值访问页面是否安全?

是否可以创建假冒会话来访问该页面?

我建议阅读有关会话管理的文章

由于HTTP是无状态的,会话需要由应用程序实现。你的方法与通常的做法相差不远

凭证在前端被询问,并作为POST参数发送。此连接受SSL/TLS保护非常重要。您不能在客户端散列并发送未加密的散列,因为任何拦截该请求的人都可以读取散列值并简单地重播该请求以获得身份验证

听起来您只想通过密码对用户进行身份验证。不要这样做。始终需要用户名和密码

一旦获得服务器端的凭据,就可以查找用户名并检查密码的哈希是否匹配(您不想在服务器端存储纯文本密码)。如果凭据有效,则在响应中为会话id设置cookie值

cookie必须是安全的,并且仅限htpps。会话id必须足够长且随机,不能被猜测。设置cookie后,每个新的客户端请求都会发送带有会话id的cookie。您的应用程序应该存储当前会话id,以便在无需再次验证的情况下查看哪个用户正在发出请求


一些框架可以为您完成所有这些。如果您没有经验,我强烈建议您使用框架,或者至少彻底阅读备忘。

我建议您阅读有关会话管理的手册

由于HTTP是无状态的,会话需要由应用程序实现。你的方法与通常的做法相差不远

凭证在前端被询问,并作为POST参数发送。此连接受SSL/TLS保护非常重要。您不能在客户端散列并发送未加密的散列,因为任何拦截该请求的人都可以读取散列值并简单地重播该请求以获得身份验证

听起来您只想通过密码对用户进行身份验证。不要这样做。始终需要用户名和密码

一旦获得服务器端的凭据,就可以查找用户名并检查密码的哈希是否匹配(您不想在服务器端存储纯文本密码)。如果凭据有效,则在响应中为会话id设置cookie值

cookie必须是安全的,并且仅限htpps。会话id必须足够长且随机,不能被猜测。设置cookie后,每个新的客户端请求都会发送带有会话id的cookie。您的应用程序应该存储当前会话id,以便在无需再次验证的情况下查看哪个用户正在发出请求


一些框架可以为您完成所有这些。如果你没有经验,我强烈建议你使用一个框架,或者至少彻底阅读备忘。

什么是“安全的”?MitM攻击?不,随便的脚本小子?大概您的实现中是否存在我们从您的高层描述中看不到的巨大安全缺陷?谁知道…?现在我只讨论在会话中存储用户名,并通过检查SESSION@Sonya没有人需要“破坏”散列本身,您只需要猜测要发送到服务器的正确散列。这可能需要一段时间才能弄清楚,而且你可以限制尝试,因为这是一种在线攻击。@deceze你的回答给了我另一个思考的问题:如果我向服务器发送密码的SHA-3,可能会有人捕获哈希,并将其发送到服务器以获得访问权限。因此,还必须使用nonce进行身份验证。没有nonce,这种安全就没有意义。对吗?嗯,无论你发送到服务器的是你的密码,如果可以拦截,任何人都可以使用该值登录。因此,是的,如果没有nonce,这很容易受到重放攻击。然而,如果某人一开始就能够拦截您的服务器通信,那么他们可能是一个MitM,在这种情况下,即使是nonce也不会有多大帮助,因为MitM可以操纵他们。唯一真正有帮助的是HTTPS。“安全”对抗什么?MitM攻击?不,随便的脚本小子?大概您的实现中是否存在我们从您的高层描述中看不到的巨大安全缺陷?谁知道…?现在我只讨论在会话中存储用户名,并通过检查SESSION@Sonya没有人需要“破坏”散列本身,您只需要猜测要发送到服务器的正确散列。这可能需要一段时间才能弄清楚,而且你可以限制尝试,因为这是一种在线攻击。@deceze你的回答给了我另一个思考的问题:如果我向服务器发送密码的SHA-3,可能会有人捕获哈希,并将其发送到服务器以获得访问权限。因此,还必须使用nonce进行身份验证。没有nonce,这种安全就没有意义。对吗?嗯,无论你发送到服务器的是你的密码,如果可以拦截,任何人都可以使用该值登录。因此,是的,如果没有nonce,这很容易受到重放攻击。然而,如果某人一开始就能够拦截您的服务器通信,那么他们可能是一个MitM,在这种情况下,即使是nonce也不会有多大帮助,因为MitM可以操纵他们。