在邮件请求正文中的Json对象中发送用户名和密码是否安全?

Dan*_*Dan 8 security passwords json

我正在构建一个Web应用程序,我的Web服务器是安全的,这意味着它使用前端的ssl证书来加密连接.

当用户登录时,会创建一个看起来像这样的JSON对象,并将其发送到服务器.

{
    username:"the user's username",
    password:"the user's password"
}
Run Code Online (Sandbox Code Playgroud)

在服务器上,使用使用salt的散列算法验证.一旦验证,就会创建一个有效一段时间的api令牌,并在标头中来回传递,以便在发出请求时验证用户.是发送这样的最佳做法/安全的用户名和密码,还是最好将它发送到标题?

kin*_*smk 12

让我们把它分成很多点:

1)您使用有效的SSL证书来保护用户和服务器之间的通信(必须有效)

2)在POST请求正文中发送用户名和密码是最佳做法(绝不使用GET发送敏感信息,如凭据)

3)在HTTP请求和响应头中发送api令牌是最佳做法(再次绝不使用GET来发送会话令牌等敏感信息)

因此,基于以上几点,似乎在此实施中没有风险,但您需要考虑以下几点:

1)如果空闲用户,API令牌的超时时间应该很短.(5~15分钟是基于应用程序临界性的平均值)

2) API令牌的长度应该是长字符串约.30~40个字符.

3) API令牌生成必须随机化并且难以预测以防止(会话预测攻击).

希望这对你有所帮助.

  • “没有风险”?风险总是存在的。 (3认同)
  • 当然,不存在所谓的“无风险”,但我的意思是所提出的解决方案遵循最佳实践。除此之外,我在答案中列出了一些安全问题,他在实施此解决方案时应该考虑这些问题。 (2认同)

qui*_*inz 6

您所描述的基本上是HTTP 基本身份验证

像这种最佳实践/安全一样发送用户名和密码,还是在标题中发送更好?

从安全的角度来看,无论您在正文中还是在标题中发送凭据,我都想不出有什么大的区别。基本上,无论谁设法阅读明文消息,都可以看到两个组件中的凭据。使用基本身份验证时的常见做法是使用 HTTP 标头:

Authorization: Basic VGVzdFVzZXI6UGFzc3dvcmQxMjM0
Run Code Online (Sandbox Code Playgroud)

VGVzdFVzZXI6UGFzc3dvcmQxMjM0您的 base64 编码凭据在哪里。在这种情况下解码的字符串是:TestUser:Password1234

重要的是要意识到,在您的情况下,TLS 是传输中凭证的唯一保护,因此您必须识别通信通道中可能暴露明确消息的所有节点。例如,如果您使用会终止 TLS 的代理,则这些代理是 MITM 攻击的潜在载体。

如果您想提高传输中凭证的安全性,一种选择可能是实施非对称端到端加密,以便您可以在客户端使用经过身份验证的公钥对凭证进行加密(例如,由受信任的人签署的证书) CA),然后在目的地使用仅您的服务器已知的私钥对其进行解密。在这种情况下,您无需过多担心传输中的消息会发生什么。