我需要澄清一些有关用户身份验证的内容,因为我想知道其正确执行的方式,
有人告诉我,身份验证是一个涉及安全性的过程。因此,身份验证过程应尽可能不向客户端隐藏,并且客户端应仅接收标志值(1 =密码正确且已认证,-1 =错误密码)和/或已认证用户的用户名。因此,它应该是应该在后端执行的SQL操作。因此,详细的过程应该是:客户端表单将用户名和哈希/加密的密码发送给SQL,SQL进行身份验证,并将带有用户名的1 / -1发送给客户端作为返回值和输出。
但是,当我通过用户身份验证进行在线搜索时,情况并非如此,我在网络上看到的所有线程(应用程序是Windows还是Web)都由开发人员执行两项操作:
在SQL Server中,按用户名搜索密码的saltHash值,然后将saltHash值与PasswordHash一起返回到客户端表单/或业务层
在客户端或BLL中,使用输入的密码和返回的saltHash值生成一个PasswordHash,然后将此passwordHash与返回的passwordHash进行比较。如果匹配的密码是正确的,如果不是密码是错误的。
这实际上是开发人员如何编写代码来在登录事件中对用户进行身份验证吗?如果基本上是这样,密码比较发生在客户端(无论是在表单还是在业务层),那么通过将实际的saltHash和passwordHash暴露给客户端,这不会带来巨大的安全风险吗?
如果有人可以给我写一些代码来演示SQL和C#的登录/身份验证过程,那就太好了!
PS-当您回复时,请不要使用LINQ,LINQ to SQL或实体框架。此刻我不认识他们。还在学习。请从Ado .NET答复
谢谢
这是一个更大的利弊讨论,很难一概而论。客户端哈希的优点:
服务器端哈希的优点:
其他一些准则:
以下是有关在客户端和服务器方案中如何进行密码哈希处理的一些准则。
如果服务器上有哈希:
如果哈希在客户端上:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句