如何在查询字符串中安全地包含密码

tom*_*tom 1 c# asp.net encryption passwords query-string

是否可以在ac#asp.net站点的查询字符串中安全地包含密码.

我知道的一些假设和事情 -

  1. 该网站没有也不会有/来自其他网站的链接/图像/ javascript /分析.所以没有引用者链接担心.
  2. 与Web浏览器的所有通信都将通过https进行.
  3. 我知道查询字符串将保留在计算机的历史记录中.
  4. 登录时需要的不仅仅是密码/用户名.因此,简单地将URL粘贴回浏览器将不会导致登录.

我知道该网站可能容易受到跨站点脚本和重放攻击.我该如何减轻这些?

鉴于上述情况,我应该如何在查询字符串中包含密码?

请不要问我'为什么',我知道这不是一个好主意,但它是客户想要的.

Rea*_*lar 5

SSL

您可以使用SSL连接安全地将密码发送到Web服务器.这会加密客户端/服务器之间的所有通信.

隐藏在标题中

基本身份验证协议将用户/密码信息放在HTTP请求标头中.C#和许多其他Web服务器语言可以访问此信息,并使用它来验证请求.与SSL混合使用时非常安全.

注册应用程序密钥

如果以上都不可能,那么建议您为每个用户创建一个唯一的密钥.而不是发送他们的密码使用此密钥.优点是密钥存储在数据库中并可以删除.用户密码保持不变,但必须再次注册才能获得新密钥.如果有人可能滥用他们的密钥,这是很好的.

进行手抖动

握手是客户端向服务器发出请求的地方,服务器发回一个随机生成的密钥.然后,客户端使用密钥从该密钥生成哈希,并将其发送回服务器.然后,服务器可以检查客户端是否知道正确的密码.相反,密码是秘密,客户端在请求中包含用户名详细信息.这可以在不发送密码的情况下进行身份验证.

加密密码

如果以上都不是可能的选项,那么您可以尝试使用JavaScript加密密码,然后再通过打开的URL发送密码.我找到了一个开源版本的AES分组密码.该项目称为JSAES,支持128到256位加密.可能还有其他JS库可以执行相同的操作.

  • OP 询问如何安全地将 PW 包含在查询字符串中......加密密码需要一个新的秘密(密码已经是),这将问题循环回自身(如何保护和传输密钥以解密密码) ? (2认同)