使用PHP中的会话和cookie创建安全登录
我正在制作一个登录脚本,我希望尽可能安全。 问题是,安全似乎是一场永无止境的战斗。 所以基本上,我正在寻找对我的想法的建议和改进。
我拥有的是仅基于会话的登录。 每次会话信息发生变化时,都会调用session_regenerate_id()以避免发生明显的劫持尝试。
当会话未设置时,我检查cookie是否有效登录,如果成功,我更新会话。
我试图通过添加散列值以及一段唯一用户信息(如用户名或ID)来保护cookie。 这个哈希包含各种信息,包括用户名/ ID,不可解密的密码哈希,IP地址的一部分等。通过从cookie中提取用户名/ ID,我可以从有效的用户信息中创建一个新的哈希,并比较与cookie中的散列。 我的希望是防止假的cookie和cookie劫持(除非他们也欺骗IP地址)。
编辑假设登录本身将通过HTTPS / SSL完成,因此传输是(合理)安全的。
我在正确的轨道上吗? 还有什么可以做,以确保我的登录?
谢谢您的帮助!
除了安全cookie之外,没有其他任何东西只能通过SSL传输。 在使用持久非会话cookie(如记住我)时,它可以减轻一些问题,通过做你正在做的事情,但不是以你想要做的那种方式。
您确实可以存储服务器变量,如用户代理,IP地址等(甚至是JavaScript变量),但它们仅用于验证持久性cookie数据与客户端的新连接匹配。 除了当你知道客户端(只有你自己)不会在每个页面加载(a la AOL)时都改变的时候,ip地址并不是一个好主意。
像LastPass这样的现代Web浏览器和第三方服务可以存储登录证书,只需要按键(有时甚至不需要)将数据发送到登录表单。 持久性cookies只适用于那些拒绝使用其他方式的人。 最后,持久的非会话cookie不再是真正需要的。
停止你在做什么。 不要检查user-agent或IP地址。 用户代理是一个攻击者控制的变量,检查这个值不会增加这个系统的安全性。 IP地址将因合法原因而发生变化,例如用户在负载平衡器或TOR后面。
会话ID必须始终为加密随机数。 在PHP中只需调用session_start() ,然后开始使用$_SESSION超级全局。 PHP为您处理所有这些事情。 如果您想改进php的会话处理程序,请使用配置。 启用use_only_cookies , cookie_httponly和cookie_secure 。 如果你在一个* nix系统上,而且如果你在windows下,那么你还可以将entropy_file设置为/dev/urandom 。
例如要验证用户:
//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并在整个会话期间使用HTTPS。 还请阅读OWASP A5:CSRF又名“会议骑行”和OWASP A2:XSS,因为它们都可以用来危害会话。
我使用基于cookie的方法(使用setcookie函数),但....
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;
}
...这些方法是无与伦比的!
我用基于cookie的攻击破解我的网站。
因此,如果有人推动病毒来阅读IE或Firefox的cookie历史记录,那么您很高兴能够找到您的管理员用户,并且传递可以被其他人使用。
那么如何解决这个问题呢? 简单:将cookie与会话服务器或会话的cookie与会话服务器,会话与文件会话或cookie与文件会话结合....将是安全的,但速度较慢:((((
链接地址: http://www.djcxy.com/p/23655.html上一篇: Creating a secure login using sessions and cookies in PHP
