From ba5d4181c0fb9074dc221fe7b6808d3b92f84b8b Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Sun, 9 Jun 2002 20:47:07 +0000
Subject: [PATCH] rejouer (??? quel jargon mes amis!) le cookie de session, en
 jajascript, pour eviter vol de cookie facon Arno.

---
 ecrire/inc_presentation.php3 |  4 +++-
 inc-public.php3              |  4 ++++
 spip_cookie.php3             | 13 +++++++++++++
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3
index 0fb3c03152..0b341bf1b1 100644
--- a/ecrire/inc_presentation.php3
+++ b/ecrire/inc_presentation.php3
@@ -1528,7 +1528,9 @@ function fin_html() {
 <p align='right'><font face="Verdana, Arial, Helvetica, sans-serif" size='2'>
 <a href='http://www.uzine.net/spip'>SPIP <?php echo $spip_version_affichee; ?></a>
 est distribu&eacute; <a href='gpl.txt'>sous licence GPL</a>.</p>
-</body></html>
+<?php if ($GLOBALS['spip_session']) {
+	echo '<script src="../spip_cookie.php3?rejoue=oui"></script>';
+} ?></body></html>
 <?php
 	flush();
 }
diff --git a/inc-public.php3 b/inc-public.php3
index fbb287c50e..23658c591d 100644
--- a/inc-public.php3
+++ b/inc-public.php3
@@ -319,6 +319,10 @@ if (($admin_ok OR ($auteur_session['statut'] == '0minirezo')) AND !$flag_preserv
 	echo "</form>\n";
 }
 
+// protection contre tentative de piratage de cookie de session
+if ($spip_session) {
+    echo '<script src="spip_cookie.php3?rejoue=oui"></script>';
+}
 
 //
 // Gestion des statistiques par article
diff --git a/spip_cookie.php3 b/spip_cookie.php3
index 799792eaff..6ed0e78184 100644
--- a/spip_cookie.php3
+++ b/spip_cookie.php3
@@ -6,6 +6,19 @@ include_ecrire ("inc_meta.php3");
 include_ecrire ("inc_session.php3");
 
 
+// rejoue le cookie pour renouveler spip_session
+if ($rejoue==oui) {
+	if (verifier_session($spip_session)) {
+		$cookie = creer_cookie_session($auteur_session);
+		supprimer_session($spip_session);
+		setcookie ('spip_session', $spip_session, time() - 24 * 7 * 3600);
+		setcookie ('spip_session', $cookie, time() + 24 * 7 * 3600);
+		@header('Content-Type: text/javascript')
+		echo " \n";	// ne pas renvoyer un fichier vide, ca fait ramer.
+		exit;
+	}
+}
+
 // tentative de login
 if ($cookie_session == "non") {
 	supprimer_session($spip_session);
-- 
GitLab