【问题标题】:What are the security implications of not closing connection to the database after you are done with it?完成后不关闭与数据库的连接有什么安全隐患?
【发布时间】:2009-01-29 16:26:01
【问题描述】:

使用后不关闭数据库连接会引发哪些安全问题? PHP 不会在新页面加载后自动关闭它吗?

【问题讨论】:

    标签: php database security


    【解决方案1】:

    正如mysql_close() 文档所说:

    通常不使用 mysql_close() 必要的,因为非持久打开 链接会自动关闭 脚本执行结束。看 也释放资源。

    由于连接由 PHP 管理,因此不应该存在安全风险。

    【讨论】:

      【解决方案2】:

      PHP 应该是一种“无共享”架构。即为每个请求分配所有资源,然后在请求完成后进行清理。因此,内存、文件句柄、套接字、数据库连接等资源应该被释放或关闭。

      但是,您可以使用persistent database connections,它没有关闭,但会重新用于下一个请求。如果你这样做,会有一些安全隐患。任何连接状态都会被下一个 PHP 请求继承。因此,如果您的应用程序使用数据库用户定义的变量,或临时表,甚至LAST_INSERT_ID(),下一个 PHP 请求可能会看到它不应该看到的特权数据。

      如果你关闭数据库连接来避免这种情况,你基本上是在破坏持久连接的价值。所以你不妨使用普通的数据库连接。

      【讨论】:

        【解决方案3】:

        我不能说页面是否关闭连接(这取决于管理它的任何内容),但一般来说,完成后关闭它是个好主意,因为让它打开更长时间可能会导致同时处理的其他想要连接到同一数据源的页面的饥饿问题。

        【讨论】:

        • 特别是如果应用程序正在使用连接池。
        【解决方案4】:

        Jeff Atwood 写了an interesting blog post 关于这个您可能会感兴趣的主题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-21
          • 1970-01-01
          • 2013-10-07
          相关资源
          最近更新 更多