共享服务器cookie登录安全性


shared sever cookie login security

如果之前有人问过这个问题,我们深表歉意。我很难找到一个能以我理解的方式解释事情的答案。

我正在使用一个共享的linux服务器来托管一两个php/mysql站点。我已经为使用会话的管理区域编码了登录名(会话数据存储在数据库中),但问题是会话在20分钟左右后超时。我已经和托管提供商谈过了,据我所知,没有办法改变这一点。我尝试过更改htaccess和个别php.ini文件中的gc_maxlifetime(它们要么破坏了系统,要么不起作用)。托管提供商确认我的尝试可能是徒劳的。

所以我改为使用cookie作为测试。然而,我担心现在存在安全问题。我存储的cookie(用户名/shar加密的密码、用户代理/remote_address、令牌和一些与时间相关的项目)在cookie中都是AES加密的,我还使用了一些盐、IP检查和在多次错误登录尝试后锁定。

令牌在登录时也会更改,并存储在数据库中进行比较,这确实起到了任何保护作用,其余项目只是确保为登录的用户显示正确的数据。我担心令牌是我唯一真正的保护。考虑到我对主持人的限制,我希望我能得到一些建议/帮助,或者指出一段代码,提供更好的解决方案,或者至少增加我所做的工作。

也许我做这件事的方式完全错了。只是为了尽我所能重新迭代,我似乎无法让会话在20分钟后停止计时:(.

感谢您提前提供的帮助。

这是一种生成会话id的糟糕方法,无论如何都不应该使用。会话id永远不会过期,当它被破解时,攻击者可以再次登录。为了使其比需要的更大。

会话ID必须始终是加密随机数。PHP生成会话令牌的方法并不好,但它可以改进。您可以使用/dev/random作为熵的来源,这会有所帮助。

你不应该为了解决这个问题而重新发明轮子。您应该能够设置session.cookie_lifetimesession.gc_maxlifetime值,并依赖于session_start()$_SESSION超全局。您可能对这篇关于PHP会话的文章感兴趣。

如果您真的想构建自己的会话处理程序,请创建一个sql表。对于该表,使用一个键作为会话id,并使用session_id()生成它。使用PHP的setcookie(),确保设置安全标志,如HTTPOnlySecure位。在数据库中插入一条新记录,确保它有一个超时值。此登录系统的最大问题是sql注入,因为攻击者可以在不必破解密码哈希的情况下获得会话id和登录名。