繁体   English   中英

PHP的检查会议足够安全?

[英]php checking session secure enough?

我有两个关于php会话和cookie的基本问题

1)服务器如何知道会话何时终止? 或何时删除session_id和info等(即,如果未调用session_destroy的话)

2)是否在客户端存储了一个cookie,其中包含服务器用来标识个人的唯一会话ID,如果有人要访问该会话ID,他们可以访问所有相同的信息吗? 除了简单地检查会话信息之外,还有其他必要的安全级别来标识用户吗?

服务器如何知道会话何时终止?

会话基本上是一堆存储在服务器上的数据。 客户端通过会话ID识别并匹配到特定会话,该会话ID存储在会话中以及客户端的cookie中,其默认名称为PHPSESSID (您可以在浏览器中找到其值,也可以在PHP中使用session_id()函数找到它的值。)如果浏览器删除此cookie,则会话ID在客户端丢失,并且客户端无法取回存储在其中的其他数据。服务器上的会话。 该数据最终将被垃圾收集器删除。

每次调用session_start()时,垃圾回收器都会以一定的概率被调用。 概率等于gc_probability / gc_divisor 如果会话持续时间超过gc_maxlifetime秒,则垃圾收集器将删除会话数据。 您可以在phpinfo()输出中或使用ini_get('session.gc_maxlifetime')检查所有这些值。 那是关于服务器上的会话数据。 现在关于客户。

会话配置包含一个值session.cookie_lifetime 引用PHP手册

session.cookie_lifetime指定发送到浏览器的cookie的生存时间(以秒为单位)。 值0表示“直到浏览器关闭”。 预设为0。

PHP会话和安全性

0有特殊含义。 它告诉浏览器不要将cookie存储到永久存储中。 因此,当浏览器终止时,会话ID cookie将立即删除。 如果开发人员设置的值不是0,则可能允许其他用户使用会话ID。 大多数应用程序应为此使用“ 0”。 如果需要自动登录功能,请实施自己的安全自动登录功能。 不要为此使用会话ID。

您可以使用以下任何一种方法来检查设置:

  1. phpinfo() ,在session部分中查找session.cookie_lifetime
  2. session_get_cookie_params()['lifetime']
  3. ini_get('session.cookie_lifetime')

因此,基本上,如果会话cookie生存期为0,则浏览器在关闭时将其删除,并且客户端将无法访问会话数据。

如果有人要访问该会话ID,他们可以访问所有相同的信息吗?

是。 只要(任何)客户端知道该ID并且在服务器上不删除会话数据,客户端就可以访问它。

除了简单地检查会话信息之外,还有其他必要的安全级别来标识用户吗?

这取决于您的应用程序。 获取会话ID并非易事,需要拦截通信或直接访问客户端数据。 使用基于TLS的加密连接可以防止拦截。 获取客户端数据需要一些恶意软件。

本文介绍了一种用于用户身份验证的更安全的cookie实现。 简而言之,尽管它仍然不能阻止cookie劫持 ,但它为您提供了一种检测它,通知用户并防止再次使用被盗cookie的方法。

另一篇文章列表更完整地概述了用户身份验证的良好做法。 与往常一样,安全性要求整个项目以安全的方式实施,而不仅仅是其中一个看似关键的部分。 但是,如果我的建议是,请不要过度使用。 对于每个项目的特定要求,工作应该是合理的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM