gpt4 book ai didi

php - 使用 cookie 而不是 session 来存储用户名和密码是否错误?

转载 作者:行者123 更新时间:2023-12-02 13:48:25 25 4
gpt4 key购买 nike

我已经开始自学 PHP,一开始,我经常会选择最简单的方法来完成任务,而不是最好的方法。现在我正在开发需要 100% 安全的重要网站,我遇到了这个难题,

我在我的主页上使用 cookie 来存储登录 session 。基本上,用户名和散列密码存储在 cookie 中,并在用户访问必须登录页面时加载并检查数据库。对于我的主页,我使用的是 md5。不是因为我想这样做,而是因为我必须这样做。我知道这会给用户带来很大的安全风险,因为键盘记录攻击基本上可以自由地获取他的密码。

在这个新网站上,我将使用 sha256,所以这应该不是问题。
这是我的问题:将此类数据存储在 cookie 中而不是 session 中会带来哪些其他安全问题?

这是我的:

  • 任何对计算机有物理访问权限的人都可以通过手动设置他的 cookie 来获取用户的哈希并将其存储以供以后使用。
  • 任何受感染的计算机都与上述
  • 相同
  • 每次加载时都会加载、解析、检查数据(不是安全问题,但仍然是优化方面的问题,不是很好,但我不介意)

  • 还要别的吗?

    cookie 中的域变量是否使其足够安全而不会被任何其他站点读取?

    编辑::我也在读到有人拦截了从客户端发送到服务器的数据。 session 与此有何不同?如果我存储一个 session ,标识符cookie是否仍然被其他人劫持和使用?还会向 cookie 添加一个 IP 地址,然后在验证 cookie 时,还要检查 IP 地址,如果它不同,那么再次打印登录表单有帮助吗?

    最佳答案

    您似乎正在尝试进行一些改进,但实际上还不够。

    永远不需要将密码存储在 cookie、 session 、数组或其他任何东西中。
    密码应该在数据库中,并且不能被取出来进一步访问它,或者以某种方式操纵数据持有者。

    否则,您在密码上带有哈希和盐的高度安全的数据库,仅与您存储密码的框架/脚本和变量或 cookie 一样安全(这比上述数据库设置安全性低)!

    从您的评论中:

    Your question and statement makes no sense, you're describing a login page and I'm describing about how the website knows you're logged in. The cookie has the username and the hashed password, not plain text password



    因此,您将 Bob 的密码存储在 cookie 中,并带有哈希等。
    我偷了 Bob 的密码 cookie。它是散列的,那么安全吗?

    好的,所以我(詹姆斯)在您的网站上使用它。你的网站怎么知道我是詹姆斯,而不是鲍勃?这不可以。
    它会检查我窃取的 cookie,以及密码哈希/盐/您在检查中匹配的任何内容(否则它对 Bob 也不会,因此将毫无用处)。
    它认为我是鲍勃。

    所以现在你开始检查其他东西,如果我有另一个 cookie,也许是用户名。
    我已经偷了那个。
    因此,现在您的网站查看我的 cookie,查看用户名和密码,检查它们,然后说“欢迎 Bob,这是您的个人/敏感信息,请按照您的意愿行事......”。

    密码留在数据库中!

    您可以尝试检查用户代理、IP 和其他一些可能不太有用/有时有用的东西等,但这些是您可以做的“以及”密码+has+salt,同时不存储密码在 cookie 或 session 中。
    如果您阻止黑客使用被盗的黄金密码 cookie(散列与否)的唯一方法是检查用户代理、IP 和其他容易被伪造的东西,那么您的网站就不安全。

    此外,每当用户需要更改密码或电子邮件地址,或检查他们在您网站上的任何敏感数据时,您都会要求他们重新输入密码。

    可能会重置他们存储在数据库中的 cookie/hash/hash+salt,但实际上取决于场景。

    编辑 {
    使用 cookie 存储 Session引用,以及 Session 中的任何敏感数据。
    同样,你应该在 session 中存储什么取决于它是什么数据,如果你运行自己的服务器,或者共享等等。共享主机可能有错误的配置,打开其他安全问题,甚至扩展 session 安全问题。
    (信息在下面的链接中-正如评论中所说,阅读是您的 friend ATM-然后对您的特定需求进行一些评估和考虑)
    }

    这里有一些严肃的读物给你:

    首先,您的 MD5甚至 SHA256不安全:
    http://php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

    Hashing algorithms such as MD5, SHA1 and SHA256 are designed to be very fast and efficient. With modern techniques and computer equipment, it has become trivial to "brute force" the output of these algorithms, in order to determine the original input.

    Because of how quickly a modern computer can "reverse" these hashing algorithms, many security professionals strongly suggest against their use for password hashing.



    另请阅读该引用的链接 - 关于您应该如何散列的部分,以及关于盐的部分。
    另外,重要的是,阅读有关如何正确存储盐和哈希的信息。那里有很多不好的建议,这些建议会误导您最终获得的安全性几乎不会比您仅使用 MD5 高。
    使用散列密码将盐存储在数据库中很好,也可以使用唯一的盐等(链接中都有,关于 mcrypt/blowfish 等)

    一个 必须阅读,即使您只从中获取一些信息(即使您忽略了我的其余答案):
    The definitive guide to form-based website authentication

    Faking Session/Cookies?

    更多阅读:
    What is the best way to prevent session hijacking?

    另请阅读:

    session 固定; session 劫持;跨站脚本;

    再一次,鉴于你这样说:

    Now that I'm developing important websites that need to be 100% secure



    你真的应该花很多时间阅读所有这些东西。
    Cookie/ session 劫持是真实的,而且通常很简单(脚本小子的东西)。
    如果您想制作安全的网站和应用程序,您确实需要了解相当多的攻击方法、预防措施等。

    最好的方法是阅读我给出的链接,然后阅读它们的任何“分支”。
    最终,您将对广泛的安全问题有一个更大的了解并解决它们。

    关于php - 使用 cookie 而不是 session 来存储用户名和密码是否错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29093534/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com