我致力于安全性,并且我将会话密钥存储在cookie中。我将使用它来检查用户是否实际连接,以及他是否尝试更改某些信息。
起初我认为只是检查会话密钥是否在数据库中,但我认为检查当前用户是否具有会话密钥而不仅仅是找到具有该密钥的用户并假设他必须是那个有联系的人。
我知道我应该使用会话存储,但由于我使用AngularJS,我不知道如何实现,所以不需要指出我应该使用会话。
- 将用户名放在cookie中是否安全? - 只是使用会话密钥并假设获得密钥最多的用户是一个好主意(稍后我会简化我对数据库的一些请求)?
答案 0 :(得分:1)
听起来基本上你想通过将用户名存储在cookie中来实现的目的是使用户名成为双因素身份验证方案中的第二个因素。问题是,用户名总是在会话ID旁边的cookie中传播,所以当一个被暴露时,另一个也是。所以没有获得安全保障。
此外,没有有效的安全性参数将用户名存储在客户端cookie中,然后信任该用户名与会话相关联的用户名。客户端可以在提交请求之前轻松更改cookie的值。任何已经设法从cookie中嗅出会话ID的攻击者也可能只是轻易读取用户名cookie,使得会话劫持攻击几乎同样难度。充其量,您没有获得更高的安全性,并为您的代码增加了不必要的复杂性。在最坏的情况下,你已经背叛了攻击者无法看到的用户名。例如。在过期的会话中。
OWASP建议:
会话ID内容(或值)
会话ID内容(或值)必须毫无意义,以防止信息泄露攻击,攻击者能够解码ID的内容并提取用户,会话或Web应用程序内部工作的详细信息
会话ID必须只是客户端的标识符,其值绝不能包含敏感信息(或PII)。与会话ID关联的含义和业务或应用程序逻辑必须存储在服务器端,特别是存储在会话对象或会话管理数据库或存储库中。存储的信息可以包括客户端IP地址,用户代理,电子邮件,用户名,用户ID,角色,权限级别,访问权限,语言首选项,帐户ID,当前状态,上次登录,会话超时和其他内部会话细节。如果会话对象和属性包含敏感信息(如信用卡号),则需要对会话管理存储库进行适当加密和保护。
建议通过使用加密哈希函数(如SHA1(160位))来创建加密强会话ID。
- https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Session_ID_Content_.28or_Value.29