error while getting forum 0 doesn't exist

[postnuke] gestion des espaces dans ...

20.12.2005, 20:38 Gestion des espaces dans les noms d'utilisateurs

I. But



Permettre à des utilisateurs d'utiliser des noms composés tout en conservant la politique de sécurité du CMS

II. Explication



Pour garder un max de sécurité, on va pas stocker les noms d'utilisateurs dans la base avec les espaces. On remplacera çà par une suite de caractéres spéciaux. Un espace par exemple dans la base sera un "p20".

Ensuite, on va distinguer deux notions, l'affichage et le stockage. Si le nom d'utilisateur doit etre affiche, on lui applique un filtre qui remplace les p20 précédent par des espaces, parallélement si le nom doit etre stocké dans la base, on remplace les p20 par des espaces.

III. Implémentation



Le hack s'effectuera en trois temps :
  • implémentation des fonctions de base pour une gestion avec espace
  • modification de l'enregistrement et login des utilisateurs
  • modification des modules ou le nom d'utilisateur est utilisé


III. 1. Les fonctions de bases


III. 1. 1. Fonctions de bases standards



à mettre dans /includes/pnAPI.php, à la fin par exemple.

Code// mumu add : gestion des espaces
function pnMPrepLoginForDisplay($var)
{
return str_replace("p20"," ",$var);
}

function pnMPrepLoginForStore($var)
{
return str_replace(" ","p20",$var);
}

III. 1. 2. Smarty de bases

Un smarty est une fonction de base utilisable dans un template. Nous allons en faire une pour vous permettre d'afficher correctement les noms d'utilisateurs directement dans le template et pas forcément dans le code avec les fonctions plus hauts.Créer un fichier function.pnMPrepLoginForDisplay.php et mettez çà dedans, ce fichier nous servira plus tard.
Code<?php
// $Id:function.pnMPrepLoginForDisplay.php,v 1.9 2005/10/07 11:54:56 landseer Exp $
// mumuri <a href=topflood.free.fr>mumuri</a>
// ----------------------------------------------------------------------
// PostNuke Content Management System
// Copyright (C) 2002 by the PostNuke Development Team.
// http://www.postnuke.com/
// ----------------------------------------------------------------------
// Based on:
// PHP-NUKE Web Portal System - http://phpnuke.org/
// Thatware - http://thatware.org/
// ----------------------------------------------------------------------
// LICENSE
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License (GPL)
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// To read the license please visit http://www.gnu.org/copyleft/gpl.html
// ----------------------------------------------------------------------


/**
* pnMPrepLoginForDisplay
* print correct login
*
*@params $params['uname'] string uname
*/
function smarty_function_pnMPrepLoginForDisplay($params, &$smarty)
{
extract($params);
unset($params);
return pnMPrepLoginForDisplay($uname);
}

?>

III. 2. Enregistrement et login d'un nouvelle utilisateur

Ouvrir modules/NewUser/user.phpRechercher
Code$minpass = pnConfigGetVar('minpass'); //by class007
Rajouter aprés
Code// mumu add
$uname = pnMPrepLoginForStore($uname);
// mumu add end
Ouvrir modules/User/user.phpchercher
Codeif (!isset($rememberme)) {
$rememberme = '';
}
rajouter aprés
Code// mumu add : gestion espace
$uname = pnMPrepLoginForStore($uname);
// mumu
Seulement pour moiOuvrir modules/User/user/access.phpRemplacer
Code$logging=str_replace("<% USER %>",ucfirst(strtolower($uname)),_LOGGINGYOU);
par
Code$logging=str_replace("<% USER %>",pnMPrepLoginForDisplay(ucfirst(strtolower($uname))),_LOGGINGYOU);

III. 3. Affichage correcte dans les modules

La partie la ch**te, maintenant il faut regarder dans chaque module, s'il n 'ya pas de p20 qui s'affiche à tout va. Auquel cas, on utilise les fonctions du I pour arranger çà.

III. 3. 1. module UserInfo

Ouvrir /modules/User/user.phpRechercher
Code$column[user_sig] AS user_sig,
$column[uid] AS pn_uid,
$column[pass] AS pass FROM $pntable[users] WHERE $column[uname]='" . pnVarPrepForStore($uname) . "'";
$result =& $dbconn->Execute($sql);
$userinfo = $result->GetRowAssoc(false);
rajouter aprés
Code$uname = pnMPrepLoginForDisplay($uname);

III. 3. 2. Module Members_List

Copier le smarty crée plus haut dans le dossier modules/Members_List/templates/pluginEnsuite dans les tous les templates ou le nom s'affiche, on va filtrerPar exemple, ouvrir modules/Members_List/templates/memberslist_user_view.htmRechercher
Code<!--[$memberslistnewest]-->
Remplacer par
Code<!--[$memberslistnewest|pnMPrepLoginForDisplay]-->
Rechercher
Code<!--[$users[users].uname]-->
Remplacer par
Code<!--[$users[users].uname|pnMPrepLoginForDisplay]-->

III. 3. 3. Module pnForum

Là c'est plus simple ;) , en fait on va directement hacker un smarty existant.Ouvrir /modules/pnforum/template/plugin/modifier.profilelink.phpRechercher
Code$string = pnVarPrepForDisplay($string);
Rajouter aprés
Code// mumu add
$string = pnMPrepLoginForDisplay($string);
Encore une petite chose pour que les recherches sur les noms d'utilisateur s'éffectue correctement.Rechercher (vers la ligne 3000-3500)
Code$query .= "f.forum_id=$forumid";
$flag = true;
}
$query .= &quot ;) ";
}

// authors with adodb
if($author) {
Rajouter aprés
Code// mumu add
$author = pnMPrepLoginForStore($author);
Rechercher
Code$whereforums .= &quot ;) ";
}

// authors with adodb
// partial sql stored in $whereauthor
$whereauthor = '';
if($author) {
Rajouter aprés
Code// mumu add
$author = pnMPrepLoginForStore($author);

III. 3. 4. Module Messages

Copier le smarty crée plus haut dans le dossier modules/messages/templates/pluginOuvrir modules/messages/templates/messages_user_view.htmRechercher
Code<!--[$posterdata.pn_uname]-->
remplacer par
Code<!--[$posterdata.pn_uname|pnMPrepLoginForDisplay]-->
Ouvrir modules/messages/templates/messages_user_new.htmRechercher
Code<!--[$fromuser]-->
Remplacer par
Code<!--[$fromuser|pnMPrepLoginForDisplay]-->
Rechercher
Code<!--[$touser]-->
Remplacer par
Code<!--[$touser|pnMPrepLoginForDisplay]-->

III. 3. 5. Block membres en lignes

ouvrir includes/blocks/i-members_online.phpRechercher
Code$unames[] = pnUserGetVar('uname', $result3->fields[0]);
Remplacer par
Code$unames[] = pnMPrepLoginForDisplay(pnUserGetVar('uname', $result3->fields[0]));


Ensuite, c'est à vous de faire pareille dans les autres modules ou y a des éventuelles problémesClubic est cité en exemple, car ils ont de trés bon taux de téléchargement et un service de trés bonne qualité.

Si ca ne marche pas, vous pouvez aussi chercher le nom du fichier
service-pack-4-windows-2000_service_pack_4_windows_2000_francais_13276.exe ou w2ksp4_fr.exe

IV. Remarque



D'autres astuces peuvent être trouvé avec la commande inurl, mais je n'ai pas d'exemples sous la main.

Merci de ne pas copier-coller ce post, faites plutot un lien vers celui ci

Vous pouvez aussi utiliser l'attribut intitle:titre pour trouver les pages qui ont le titre spécifier dans les recherches.

mumuri forum.ashots.org
mumuri
mumuri
Messages : 13 306

  • allo ciné
  • astuces de jeux vidéos
  • dessin animé
  • forum
  • anime
  • séries télé
  • avis livres
  • bourse
  • smileys
  • avis films
Tous droits réservés © 2008 . Top flood Crédits des logiciels tiers.   - en partenariat avec flood.fr .