代码之家  ›  专栏  ›  技术社区  ›  Jay

PHP登录系统

  •  6
  • Jay  · 技术社区  · 16 年前

    如果您需要更多信息或对此不清楚,请告诉我。谢谢!

    6 回复  |  直到 16 年前
        1
  •  9
  •   VoteyDisciple    16 年前

    这是一个完全合理的方法。您的访问者将永远无法编辑服务器上的会话数据(除非服务器本身不安全,在这种情况下,任何事情都是公平的),因此会话中的LoggedIn=1值是完全安全的。

    但是,请记住一个访问者劫持另一个访问者的会话(通过窃取会话密钥)的风险。帮助防止这种情况的一种方法是还存储访问者的IP地址(来自 $_SERVER['REMOTE_ADDR'] )在会话中,然后在以后的请求中确认它没有改变。

        2
  •  3
  •   cletus    16 年前

    有许多风险需要考虑:

    1. 会话劫持: 这就是有人窃取用户的cookie并假装是他们的地方。有些人会建议IP过滤来应对这种情况,但这可能会产生尴尬的副作用。人们通过移动设备或在工作、家庭和wifi热点使用的笔记本电脑上使用网站,还有其他IP地址可能发生变化的情况。所以我的建议是,这样做只是为了 高度地 敏感网站(如网上银行);
    2. 您的网站受到攻击: 在这种情况下,用户无论如何都可以访问您的数据库,因此在会话中存储身份验证信息没有额外的风险。通过向数据库发出UPDATE语句,他们也可以很容易地更改自己的身份;
    3. 联合托管网站受到攻击:
    4. 联合托管网站是恶意的: 类似于(3),除了威胁是内部的,但在其他方面是相似的。

    所以我会说这很好(受(2)的约束),但要注意风险。至少遵循以下最佳实践:

    1. 切勿存储未加密的密码;
    2. 使用强哈希算法(首选SHA1或至少MD5);
    3. 确保身份验证Cookie在某个时候过期。时间长短取决于你的网站。这可能是一周、两周、一个小时或两个小时的不活动,或者两者兼而有之。
        3
  •  1
  •   Jed Smith    16 年前

    回到你的问题:是的,那很好。然而,采取措施确保会议不被劫持。维基百科 actually has a fairly good article on it .

    在我编写的大多数系统中,我都包含了验证远程IP没有更改的逻辑。您也可以将其存储在会话中,因为会话变量不会传递给用户(只有会话ID)。如果你真的想发挥创造力,你可以添加其他检查——用户代理,等等。

    您还必须考虑会话攻击。检查推荐人。如果你有一个灾难性的操作,让我们称之为对DeleteMyAccount的POST,我可以编写一个表单提交和javascript,在一个无关网站的论坛帖子中点击DeleteMyAaccount,指望该会话出现在用户的信息中。

        4
  •  0
  •   Artelius    16 年前

    听起来不错;你可能想考虑设置一个过期时间(这样如果有人离开并打开浏览器,他们就不在了 很多危险)。

        5
  •  0
  •   staticsan    16 年前

    总的来说,你肯定在正确的轨道上。我建议您在会话中为用户使用ID,而不是用户名,因为ID是代码中更好的唯一引用。

    此外,md5不再被认为对密码哈希足够强大:它太快了,无法哈希,你不希望攻击者需要一遍又一遍地运行它(而真正的用户只需要执行一次)。我希望我能找到参考,但前沿智慧是做很多轮的前沿哈希算法,比如sha512。

        6
  •  0
  •   Tareq    16 年前

    您可以使用COOKIE代替SESSION变量。您可以通过以下方式设置COOKIE

    setcookie('ID',$变量,time()+8*60*60);

    您必须了解SQL注入。当您插入或更新用户文本框相关的数据库时,请注意SQL注入。通过htmlentities()函数插入/更新您的值。