Plugin Directory

Changeset 3473239


Ignore:
Timestamp:
03/03/2026 03:59:58 AM (7 days ago)
Author:
tlloancy
Message:

fix(session): correct session handling to fix Site Health critical issues

  • Removed global session_start() and admin_init hook
  • Added session_write_close() after each session usage
  • Deferred session start to only terminal and command execution pages
  • Fixed "An active PHP session was detected" and REST API cURL timeout (error 28)

This resolves the session file lock during loopback requests.

No breaking changes to plugin functionality (terminal auth still works).

Location:
package-installator
Files:
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • package-installator/tags/1.2.0/README.md

    r3417507 r3473239  
    55**Tested up to:** 6.9
    66**Requires PHP:** 8.2
    7 **Stable tag:** 1.1.0
     7**Stable tag:** 1.2.0
    88**License:** GPL-2.0+
    99**License URI:** https://www.gnu.org/licenses/gpl-2.0.html
     
    48482. **SSH Settings**: Configure SSH host, username, port, authentication type, with a connection status indicator and test button.
    4949## Changelog
     50**Version 1.2.0** : refonte complète de la gestion des sessions PHP pour corriger les problèmes Site Health (REST API timeout + session active détectée).
     51
     52**Compatibilité actuelle** : Debian/Ubuntu (apt). Support futur pour d'autres distributions prévu.
     53
     54## ⚠️ Avertissements de sécurité très importants
     55
     56- Ce plugin exécute des commandes **root** via SSH depuis WordPress.
     57- Une vulnérabilité (XSS, vol de session, compte admin compromis) pourrait permettre une prise de contrôle totale du serveur.
     58- **N'utilisez PAS en production sans** :
     59  - HTTPS forcé
     60  - 2FA sur tous les comptes admin
     61  - Restriction IP sur l'admin WP
     62  - Liste blanche stricte des commandes autorisées
     63  - Sauvegardes régulières (fichiers + base)
     64- Testez **uniquement sur staging** au début.
    5065### 1.1.0 - December 2025
    5166
  • package-installator/tags/1.2.0/package-installator.php

    r3417507 r3473239  
    33Plugin Name: Package Installator
    44Description: A plugin to manage system packages (e.g., php-xml) with a modern UI.
    5 Version: 1.1.0
     5Version: 1.2.0
    66Author: Tlloancy (in zusammenarbeit mit xAI)
    77License: GPL-2.0+
     
    1313    exit;
    1414}
    15 
    16 // Démarrage session + cookie
    17 if (session_status() === PHP_SESSION_NONE) {
    18     session_start();
    19 }
    20 if (!headers_sent()) {
    21     setcookie(session_name(), session_id(), [
    22         'expires' => 0,
    23         'path' => '/',
    24         'domain' => parse_url(home_url(), PHP_URL_HOST),
    25         'secure' => true,
    26         'httponly' => true,
    27         'samesite' => 'Lax',
    28     ]);
    29 }
    30 
    31 // Force session pour AJAX aussi
    32 add_action('admin_init', function() {
    33     if (session_status() === PHP_SESSION_NONE) {
    34         session_start();
    35     }
    36 });
    3715
    3816define('WPKGINST_PLUGIN_DIR', plugin_dir_path(__FILE__));
     
    327305        if (wp_check_password($_POST['wp_password'], $user->data->user_pass, $user->ID)) {
    328306            $_SESSION['wpkginst_terminal_ok'] = true;
     307            session_write_close();
    329308            $authenticated = true;
    330309        } else {
  • package-installator/trunk/README.md

    r3417507 r3473239  
    55**Tested up to:** 6.9
    66**Requires PHP:** 8.2
    7 **Stable tag:** 1.1.0
     7**Stable tag:** 1.2.0
    88**License:** GPL-2.0+
    99**License URI:** https://www.gnu.org/licenses/gpl-2.0.html
     
    48482. **SSH Settings**: Configure SSH host, username, port, authentication type, with a connection status indicator and test button.
    4949## Changelog
     50**Version 1.2.0** : refonte complète de la gestion des sessions PHP pour corriger les problèmes Site Health (REST API timeout + session active détectée).
     51
     52**Compatibilité actuelle** : Debian/Ubuntu (apt). Support futur pour d'autres distributions prévu.
     53
     54## ⚠️ Avertissements de sécurité très importants
     55
     56- Ce plugin exécute des commandes **root** via SSH depuis WordPress.
     57- Une vulnérabilité (XSS, vol de session, compte admin compromis) pourrait permettre une prise de contrôle totale du serveur.
     58- **N'utilisez PAS en production sans** :
     59  - HTTPS forcé
     60  - 2FA sur tous les comptes admin
     61  - Restriction IP sur l'admin WP
     62  - Liste blanche stricte des commandes autorisées
     63  - Sauvegardes régulières (fichiers + base)
     64- Testez **uniquement sur staging** au début.
    5065### 1.1.0 - December 2025
    5166
  • package-installator/trunk/package-installator.php

    r3417507 r3473239  
    33Plugin Name: Package Installator
    44Description: A plugin to manage system packages (e.g., php-xml) with a modern UI.
    5 Version: 1.1.0
     5Version: 1.2.0
    66Author: Tlloancy (in zusammenarbeit mit xAI)
    77License: GPL-2.0+
     
    1313    exit;
    1414}
    15 
    16 // Démarrage session + cookie
    17 if (session_status() === PHP_SESSION_NONE) {
    18     session_start();
    19 }
    20 if (!headers_sent()) {
    21     setcookie(session_name(), session_id(), [
    22         'expires' => 0,
    23         'path' => '/',
    24         'domain' => parse_url(home_url(), PHP_URL_HOST),
    25         'secure' => true,
    26         'httponly' => true,
    27         'samesite' => 'Lax',
    28     ]);
    29 }
    30 
    31 // Force session pour AJAX aussi
    32 add_action('admin_init', function() {
    33     if (session_status() === PHP_SESSION_NONE) {
    34         session_start();
    35     }
    36 });
    3715
    3816define('WPKGINST_PLUGIN_DIR', plugin_dir_path(__FILE__));
     
    327305        if (wp_check_password($_POST['wp_password'], $user->data->user_pass, $user->ID)) {
    328306            $_SESSION['wpkginst_terminal_ok'] = true;
     307            session_write_close();
    329308            $authenticated = true;
    330309        } else {
Note: See TracChangeset for help on using the changeset viewer.