Browse Source

Utiliser le pipeline formulaire_receptionner() pour decrypter les names des formulaires proteges, cela evite a partir de SPIP 3.1.5 de jouer deux fois le verifier()

master v2.3.0
Cerdic 9 months ago
parent
commit
86a0cfe260
  1. 42
      nospam_pipelines.php
  2. 3
      paquet.xml

42
nospam_pipelines.php

@ -103,6 +103,33 @@ function nospam_formulaire_charger($flux) {
return $flux;
}
/**
* Decrypter le POST avant appel des verifier si besoin
* Si on est appelé ici (SPIP >3.1.5) ça permet d'arriver dans le verifier() avec des name decryptés
* et de pas rejouer 2 fois le verifier(), ce qui est plus safe
*
* @param array $flux
* @return array
*/
function nospam_formulaire_receptionner($flux){
$form = $flux['args']['form'];
// y a-t-il des names encryptes a decrypter ?
if (_SPAM_ENCRYPT_NAME or _request('_nospam_encrypt')){
include_spip("inc/nospam");
include_spip("inc/nospam_encrypt");
// y a-t-il des names encryptes a decrypter ?
// si oui on les decrypte avant execution de verifier
include_spip("inc/nospam_encrypt");
$res = nospam_encrypt_decrypt_post($form);
// rien a faire selon le resultat, c'est de toute façon rejoué dans verifier() qui catchera les erreurs si besoin
}
return $flux;
}
/**
* Verifier le jeton temporaire lie a l'heure et a l'IP pour limiter la reutilisation possible du formulaire
*
@ -115,11 +142,11 @@ function nospam_formulaire_verifier($flux) {
include_spip("inc/nospam");
$erreur = '';
// y a-t-il des names encryptes a decrypter ?
// si oui on les decrypte puis on relance la verif complete
// attention, du coup verifier() est appele 2 fois dans ce cas (peut poser probleme ?)
// donc on repasse ici une deuxieme fois, et il ne faut pas relancer le decryptage,
// ce qui est assure par le fait que nospam_encrypt_decrypt_post() retourne false au second coup
// y a-t-il (encore) des names encryptes a decrypter ?
// - soit nospam_formulaire_receptionner() a fait le job et rien a faire ici (retour false)
// - soit il y a eu une erreur lors de nospam_formulaire_receptionner() et on va la retrouver ici
// - soit on est en SPIP < 3.1.5 et on les decrypte puis on relance la verif complete ()
// - au second coup de verifier() on ne fait rien car nospam_formulaire_receptionner() renvoie false
if (_SPAM_ENCRYPT_NAME or _request('_nospam_encrypt')) {
include_spip("inc/nospam_encrypt");
$res = nospam_encrypt_decrypt_post($form);
@ -169,13 +196,14 @@ function nospam_formulaire_verifier($flux) {
}
$flux['data']['message_erreur'] .= $erreur;
if ($form == 'forum')
if ($form === 'forum') {
unset($flux['data']['previsu']);
}
}
// pas la peine de filtrer les contenus postés par un admin
if (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut'] != '0minirezo') {
if (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut'] !== '0minirezo') {
if ($verifier_formulaire = charger_fonction("verifier_formulaire_$form", "nospam", true)) {
$flux = $verifier_formulaire($flux);
// recuperation de la liste des IPs blacklist/greylist

3
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="nospam"
categorie="performance"
version="2.2.1"
version="2.3.0"
etat="stable"
compatibilite="[3.1.0;4.0.*]"
logo="images/nospam-64.png"
@ -20,6 +20,7 @@
<pipeline nom="pre_edition" inclure="nospam_pipelines.php" />
<pipeline nom="formulaire_fond" inclure="nospam_pipelines.php" />
<pipeline nom="formulaire_charger" inclure="nospam_pipelines.php" />
<pipeline nom="formulaire_receptionner" inclure="nospam_pipelines.php" />
<pipeline nom="formulaire_verifier" inclure="nospam_pipelines.php" />
<pipeline nom="nospam_lister_formulaires" action="" />
</paquet>

Loading…
Cancel
Save