对于我的自定义框架,我让用户登录并设置会话,如下所示:
FragmentAdapter
所有内容都存储在数据库中,密码以BCRYPT进行哈希处理。除此之外,我强制使用SSL,这样用户就无法通过普通的http访问网站。
这种方法安全吗? 如果不;什么是安全漏洞,我可以做些什么来使这更安全?
答案 0 :(得分:1)
首先,要获取会话ID,您应该使用session_id()
,$_SESSION['id']
将抛出一个未定义的偏移异常,除非您在该值下放置一些东西。
您不应使用会话ID来评估用户是否经过身份验证,因为它始终会评估为TRUE。当您开始会话时,会话ID将始终存在,您应该在成功验证后将您的用户存储在会话中,例如$_SESSION['auth_user'] = get_user_from_db()
然后使用它来评估用户是否经过身份验证:
if (isset($_SESSION['auth_user'])) {
// Your logic
}
阅读this post了解身份验证最佳做法。
简而言之,您的会话cookie只能通过http访问,您应该像您一样强制使用安全的cookie。每次用户获得权限时(例如,在成功进行身份验证后),您都应该重新生成会话ID。
您需要实施CSRF保护机制。
您应该实施登录限制(在用户在特定时间段(例如1分钟)内有X次失败登录尝试后超时)以防止暴力攻击。
答案 1 :(得分:0)
最佳方法始终是在登录屏幕上,并立即登录强制使用随机数生成新会话ID 。
session_start();
$newsessid = somerandomnumberfunction();
session_id($newsessid);
您还可以使用session_regenerate_id()
函数生成新ID
session_start();
session_regenerate_id();
此外,确保每个有效会话都是针对ip检查的。一种好的方法是将会话ID和远程ip信息存储在表中,或者在用户登录后更好地将ip存储为会话变量,并确保为了安全性而继续保留页面。当用户使用相同的办公室或共享网络时,这种情况不会起作用,因为对外界的ip是相同的。
https 对于敏感网站来说总是一个好主意,但如果你真的想要一个万无一失的系统,那么对所有使用会话的页面保持持久是非常重要的,否则任何人都可以随时嗅探你的数据包。
P.S根据我的知识,你的方法是安全的。
一些提示:
session.use_only_cookies = 1
并检查是否一切正常
细。session.use_trans_sid = 0