用于网站登录的PHP会话安全性

Jas*_*per 1 php security ssl session login-script

我正在为我正在开发的网站创建一个登录脚本,并且正在使用PHP会话来验证用户身份.

我已将脚本设置为仅对cookie使用HTTP,并且仅使用cookie来存储会话ID.

基本上,我想知道两件事

1.我还有什么办法可以让我的登录更安全吗?

2. PHP手册说session_destroy()删除会话数据,但不会取消任何会话变量.如果是这种情况,它实际上是什么破坏,我应该在注销时手动取消设置会话变量吗?

谢谢你的帮助

编辑: 我使用免费托管,无法安装任何Apache插件或更改php.ini文件

编辑: 我已经读过使用SSL来阻止会话ID被盗,但我没有能力在服务器上安装OpenSSL,那么还有其他方法可以保护会话ID吗?

set*_*rgo 12

最重要的是要记住:

不要相信从客户那里回来的任何东西

永远不要假设您获得的信息(在表单字段(甚至是隐藏的),会话变量等)有效 - 使用服务器端逻辑来执行这些检查.

1.)确保您的会话已加密.如果你使用PHP的内置会话,相关的熵(随机性)相对较高,所以你应该没问题.

2.)仅将会话ID存储在cookie中.任何其他信息应该只使用该ID在服务器上关联.我见过许多情况,如果会话中的标记'is_admin'= true,系统工程师会确定某人是否为admin.显然你可以看到这个问题.

有些人会抱怨它的操作很昂贵,但我建议为活动会话创建一个(我的)SQL表.然后,在加载页面时,从表中提取关联数据并像处理任何其他数据一样处理它.一些框架(如CodeIgnitor)通过更改一个配置项为您执行此操作.

3.)验证IP - 在您的表中,添加当前的IP地址.如果当前IP与会话中的IP不匹配,则可能有人试图劫持.强制注销并终止.

4.)对登录尝试设置限制.加1秒睡眠(); 每次登录时服务器端对用户来说几乎不会引起注意,但对于自动化系统,它几乎不可能进行强力登录.

5.)注意"过于健谈".在登录时,您可能认为提供"用户名不存在"或"密码错误"等描述性错误会很有帮助.像这样的信息告诉黑客他们已经获得了有效的用户名 - 这使得黑客攻击速度更快.

6.)不要太关心PHP和SSL的安全性以及更多自己的逻辑.仅仅因为网站使用SSL并不能确保其安全.SSL与有效逻辑相结合可提供安全性.

7.)如果您对SUPER感兴趣,您将需要转移到专用服务器.您服务器上托管的其他网站可能可以访问您的代码/数据库信息.他们可能没有采取必要措施来保证您的安全.

8.)不允许同时进行会话.这可以防止MITM(中间人)攻击.数据库会话方法的另一个优点是,如果两个客户端尝试从不同的IP同时登录,则可以强制注销.DB方法的另一个优点是它使您的系统可扩展(因为会话存储依赖于文件系统).

9.)使用mysql_real_escape_string而不是add_slashes

如果您需要有关PHP安全性的更多信息,那么这是我的专长.随时联系我.