spip : la syndication presenterait-elle un danger ?

Je n'utilise pas franchement spip mais j'en ai une version pour tester
upgradée par un autre utilsateur en 1.4.

Or lors d'un debuggage de mon générateur de RSS (externe à spip), une faute
de code m'a fait laisser un " (guillemet) dans chacun des champs
/rss/channel/item/link
de telle sorte qu'il contenait
<link>http://une_url/blabla.html"</link>
or cela a fait planter la syndication de spip qui ne pouvait alors se faire
et a sortie des tombereaux d'erreur MySQL.

Intrigué, je suis allé voir le code source de spip pour trouver dans le
fichier ecrire/inc_sites.php3 la partie suivante (dans la fonction
syndic_a_jour() ):

<...>
} for($i = 0 ; $i < count($item) ; $i++){
} ereg("<title>(.*)</title>",$item[$i],$match);
} $le_titre=addslashes($match[1]);
} $match="";
} ereg("<link>(.*)</link>",$item[$i],$match);
} $le_lien=$match[1];
} $match="";
} ereg("<date>(.*)</date>",$item[$i],$match);
} $la_date=$match[1];
} $match="";
} ereg("<author>(.*)</author>",$item[$i],$match);
} $les_auteurs=addslashes($match[1]);
} $match="";
} ereg("<description[^>]*>([^<]*)</description>",$item[$i],$match);
} $la_description=addslashes($match[1]);
}
} $match="";
} if (strlen($la_date) < 4) $la_date=date("Y-m-j H:i:00");
}
} $query_deja="SELECT * FROM spip_syndic_articles WHERE url=\"$le_lien\" AND id_syndic=$now_id_syndic";
} $result_deja=spip_query($query_deja);
} if (mysql_num_rows($result_deja)==0){
<...>

Il s'avère que les lignes
} ereg("<link>(.*)</link>",$item[$i],$match);
} $le_lien=$match[1];
puis
} $query_deja="SELECT * FROM spip_syndic_articles WHERE url=\"$le_lien\" AND id_syndic=$now_id_syndic";

ne font pas bon ménage car elle permettent en effet de passer des " à la
chaine SQL au mieux la rendant illégale au pire permettant la concaténation
d'instruction SQL et des dégats potentiels à la base.

Un ou deux addslashes() en plus ne ferait amha pas de mal... :slight_smile:

Bon courage.
--
Fred - Depuis son doux foyer

From jccolom@club-internet.fr Mon Sep 16 18:43:59 2002

Return-Path: <jccolom@club-internet.fr>
Received: from relay-1v.club-internet.fr (relay-1v.club-internet.fr
  [194.158.96.112])
  by miel.brainstorm.fr (Postfix) with ESMTP id F3AF61BFC7
  for <spip@rezo.net>; Mon, 16 Sep 2002 18:43:58 +0200 (CEST)
Received: from moi (lns06v-11-42.w.club-internet.fr [212.194.118.42])
  by relay-1v.club-internet.fr (Postfix) with SMTP id 3A1BE16A8
  for <spip@rezo.net>; Mon, 16 Sep 2002 18:43:58 +0200 (CEST)
Message-ID: <001e01c25da0$6ca10e40$2a76c2d4@moi>
From: "jean claude colombani" <jccolom@club-internet.fr>
To: <spip@rezo.net>
Date: Mon, 16 Sep 2002 18:45:11 +0200
Organization: moi
MIME-Version: 1.0
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2600.0000
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
X-Mailman-Approved-At: Mon, 16 Sep 2002 22:24:39 +0200
Subject: =?iso-8859-1?q?=5BSpip=5D_?= =?iso-8859-1?q?help?=
X-BeenThere: spip@rezo.net
X-Mailman-Version: 2.1b2+
Precedence: list
List-Help: <mailto:spip-request@rezo.net?subject=help>
List-Archive: <Discuter chez rezo.net;
List-Unsubscribe: <http://listes.rezo.net/mailman/listinfo/spip&gt;,
  <mailto:spip-request@rezo.net?subject=unsubscribe>
List-Subscribe: <http://listes.rezo.net/mailman/listinfo/spip&gt;,
  <mailto:spip-request@rezo.net?subject=subscribe>
List-Post: <mailto:spip@rezo.net>
List-Id: SPIP : questions/reponses <spip.rezo.net>
X-List-Received-Date: Mon, 16 Sep 2002 16:43:59 -0000
Status: O
Content-Length: 184
Lines: 6

comment récupère mon mot de passe disparue sans laisse d'adresse depuis deux
jours ,
je signal que j'ai utilisé le lien mot de passe perdu sans succès
jcc
http://citoyenfr.lautre.net

@ Fred Senis <fs@caduceus.fr.eu.org> :

Or lors d'un debuggage de mon générateur de RSS (externe à spip), une faute
de code m'a fait laisser un " (guillemet) dans chacun des champs
/rss/channel/item/link
de telle sorte qu'il contenait
<link>http://une_url/blabla.html"</link>
or cela a fait planter la syndication de spip qui ne pouvait alors se faire
et a sortie des tombereaux d'erreur MySQL.
Intrigué, je suis allé voir le code source de spip pour trouver dans le
fichier ecrire/inc_sites.php3 la partie suivante (dans la fonction
syndic_a_jour() ):

.../...

Un ou deux addslashes() en plus ne ferait amha pas de mal... :slight_smile:

Merci, je vais corriger ça illico.

-- Fil