gpt4 book ai didi

php - 在 PHP 中安全地创建和销毁登录 session

转载 作者:IT王子 更新时间:2023-10-29 00:12:08 25 4
gpt4 key购买 nike

这是我在网站上控制身份验证的代码。我不确定我的逻辑是否正确。如果用户名和密码正确,则会发生以下情况:

if(session_start())
{
session_regenerate_id(true);//without this the session ID will always be the same
$_SESSION['loggedInUser'] = $uName;
echo 'You are now logged in';
}
else echo 'Right password/username but session failed to start';

后续页面检查用户是否登录

session_start();
if(isset($_SESSION['loggedInUser'])
{
//rest of page
}
else echo 'you must log in';

注销时我有

session_start();//if I don't have this the next line produces an error
session_unset();//destroys session variables
session_destroy();//ends session

我不想在注销时调用 session_start(),但如果我没有它,我会收到消息 Trying to destroy uninitialized session。我该如何解决这个问题?

是否建议根据 IP 地址和用户代理创建指纹?我认为这很糟糕,因为多台计算机可以共享相同的 IP 地址,例如计算机实验室,并且所有流量都通过代理,如果是动态的,同一台计算机可以更改其 IP 地址。另一方面,这种情况发生的频率如何?为防止所有 session 劫持而阻止少数有效使用可能是值得的。

即使您可以推荐我应该阅读以了解该主题的知名文章,这也很棒,谢谢。

5/6 的答案的得票数小于 0 :( 否决选民评论以便我知道要注意什么?

最佳答案

首先你应该阅读 Mozilla WebAppSec Security Coding Guideline - Session ManagementOWASP A3-Broken Authentication and Session Management .你可以configure PHP's session handler以满足这些要求。

您应该防止的第一个缺陷是 A9-Insufficient Transport Layer Protection .简而言之,您不希望有人使用 a tool like Firesheep 劫持 session 。 .可以通过强制浏览器仅通过 https 发送 session ID 来防止这种攻击:

session.cookie_secure=1

您可以通过设置 httponly flag 来阻止攻击者使用 XSS 获取 session ID。 :

session.cookie_httponly=1

总是想要使用 cookie 来存储您的 session ID。如果可以使用 GET 或 POST 变量传递 session ID,则攻击者可以使用 Session Fixation attack劫持 session 。考虑这种攻击的另一种方式是您不希望攻击者为另一个用户创建 session :

session.use_cookies=1
session.use_only_cookies=1

接下来,您要确保从 CSPRNG 中获得至少 128 位的熵。在 *nix 系统下你可以使用 /dev/urandom:

session.entropy_file="/dev/urandom"
session.entropy_length=16

session 处理程序不是一切。你还需要担心 Cross-Site Request Forgery attacks (又名 CSRF 或“ session 骑行”)和跨站点脚本 (XSS)。 XSS 可用于破坏 CSRF 保护(即使使用 http_only cookies!)。 Clickjacking攻击者也可以使用它来执行未经授权的操作。

设置这些配置选项后,只需调用 session_start()。至于在用户退出时调用session_destroy()销毁session,就这么简单!

关于php - 在 PHP 中安全地创建和销毁登录 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15510094/

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