我正在为我的用户建立连接系统。所以我决定使用Cookies来存储用户ID和密码(在sha1中)。但我有一个问题。如果随机用户获得了cookie及其名称的值,他是否可以使用js函数创建它们并进入帐户?
答案 0 :(得分:2)
如果我将sha1密码和用户ID存储在安全标记&中,是否安全? https Cookies?
没有
我想你想知道为什么?首先,定义“安全”。您试图减轻什么威胁?
一旦对凭据进行了哈希处理,就无法恢复明文。由于您无法将散列字符串渲染回纯文本,因此我们可以假设其目的是将它们与服务器上保存的相同散列字符串进行比较,是吗?如果您想要缓解的威胁是某人发现密码和用户ID 并且您使用SHA256
而不是SHA1
之类的内容,那就太棒了。
但是,如果您想要缓解的威胁包括重放攻击或会话劫持,那么这些威胁并不比任何其他固定字符串更好。事实上他们更糟糕。如果用户有义务为每个HTTPS请求提供密码,那么对他们来说很糟糕,但至少应用程序可以限制登录尝试并阻止暴力攻击。如果凭证被散列并在cookie中进行交换,那么它们就会暴露给对手,如果获得可能会受到暴力破解或在彩虹表中查找,以便网络将凭证发回,甚至加密或散列,有点糟糕。
这个问题没有提到盐或会话键控。攻击者将查看cookie以查看在多个会话中返回相同的值。为了防止重放攻击,您需要在散列之前附加一个随机数以充当盐,因此散列字符串每次都会更改。但它并没有解决将转换后的凭证对发送到您自己服务器控制范围之外的问题,或者这比仅仅为同一目的使用长随机字符串要糟糕得多。
此外,除非用户更改密码,否则凭据的哈希值不会超时 - 此时它会告诉对手用户刚刚更改了密码,这对社交工程师来说是一个很好的信息进行密码恢复的IT支持人员。 “嗨,我只是更改了我的密码并锁定了帐户。你能重置它吗?员工ID?如果我有权访问我可以查一下。你可以重置它吗?我真的是我。我知道的其他人怎么办?我刚改变了吗?“
支持人员永远不会猜到这个问题的答案是“因为Victor的应用程序设计告诉我它刚刚改变了”并且可能只是为对手重置它。但是,如果会话通过会话cookie或三方登录令牌保持活动,则表示该用户会话的唯一字符串可以缓解到目前为止所讨论的所有威胁:
但是,我不想回答问题,而是回答“是否存在全面的Web应用程序安全最佳实践的权威来源?”这是一个更容易回答和的问题,如果您完成所需的研究,它可能会回答您的初始问题。
请参阅:Open Web Application Security Project (OWASP)。
请特别注意Session Management Cheat Sheet和Authentication Management Cheat Sheet,因为这些内容涵盖了您在此处尝试的大部分内容。
OWASP定期分析最近一段时间内报告的所有违规行为,然后根据样本期间最常出现的根本原因发布十大漏洞列表。当我代表客户QA新网站时,他们几乎总是在OWASP的十大列表中有几个缺陷。如果作为开发人员或网站开发公司,您希望站在人群之上并获得大量重复业务,那么您需要做的就是确保您提供的网站在OWASP列表中没有任何缺陷。问题表明,任何建议的应用程序都会有至少4或5个来自OWASP Top 10的缺陷,因此这是目前的理想目标。目标很高。