gpt4 book ai didi

php - 在 PHP 中使用 session 和 cookie 创建安全登录

转载 作者:IT王子 更新时间:2023-10-28 23:54:58 25 4
gpt4 key购买 nike

我正在制作一个我希望尽可能安全的登录脚本。问题是,安全似乎是一场永无止境的战斗。因此,从本质上讲,我正在寻找对我的想法的建议和改进。

我拥有的是完全基于 session 的登录。只要 session 信息发生变化,就会调用 session_regenerate_id() 以避免明显的劫持尝试。

当未设置 session 时,我会检查 cookie 以获取有效登录,如果成功,我会更新 session 。

我尝试通过添加哈希值和一段唯一的用户信息(如用户名或 ID)来保护 cookie。这个散列由各种信息组成,包括用户名/id、无法破译的密码散列、部分 IP 地址等。通过从 cookie 中提取用户名/id,我可以从有效的用户信息中生成一个新的散列并进行比较与 cookie 中的哈希值。我的希望是防止假 cookie 和 cookie 劫持(除非他们也欺骗 IP 地址)。

编辑 假设登录本身将通过 HTTPS/SSL 完成,因此传输(合理)安全。

我走在正确的轨道上吗?还可以采取哪些措施来保护我的登录?

感谢您的帮助!

最佳答案

停止你正在做的事情。不要检查 user-agent 或 ip 地址。用户代理是攻击者控制的变量,检查这个值不会增加这个系统的安全性。 IP 地址会出于合法原因而更改,例如如果用户在负载平衡器或 TOR 后面。

session ID 必须始终是 cryptographic nonce .在 php 中只需调用 session_start() 然后开始使用 $_SESSION super 全局。 PHP 会为您处理所有这一切。如果你想改进 php 的 session 处理程序,请使用 configurations .启用 use_only_cookiescookie_httponlycookie_secure。如果您使用的是 *nix 系统,那么将 entropy_file 设置为 /dev/urandom 也是一个好主意,但如果您使用的是 Windows,那么您就有麻烦了。

例如验证用户:

//In a header file
session_start();
...
if(check_login($_POST['user_name'],$_POST['password'])){
//Primary key of this user
$_SESSION['user_id']=get_user_id($_POST['user_name']);
$_SESSION['logged_id']=True;
}

验证用户是否登录:

//in a header file
session_start()
...
if(!$_SESSION['logged_id']){
header("location: login.php");
die();//The script will keep executing unless you die()
}

要改进此系统,请阅读 OWASP A9 并在 session 的整个生命周期内使用 HTTPS。另请阅读 OWASP A5:CSRF 又名“session riding”和 OWASP A2:XSS,因为它们都可以用来破坏 session 。

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

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