Après les deux premiers tutoriaux au sujet des attaques de type SQL Injection, le billet d’aujourd’hui sera dédié à un vecteur d’attaque un peu particulier, si vous ne connaissez pas les principes d’une injection sql, je vous invite vivement à lire les deux premiers articles avant de passer à la suite ;)

Je rappelle que la série de ces tutoriaux est dans le but de donner une idée sur les différents aspects et vecteurs d’attaque d’une injection SQL, j’espère que ça vous aidera à mieux vous protéger et percevoir les risques en codant, n’hésitez pas à me faire part de vos remarques ;)

Qu’est ce que Blind SQL Injection?

Blind SQL Injection est un vecteur d’attaque dont l’approche est très différente de celle des injections classiques, elle permet comme ses ascendants d’injecter des données à partir d’une base d’une application vulnérable. Repérer une faille de ce type n’est pas toujours facile et demande une série de tests.

Les Injections blind se caractérisent par l’absence d’un message d’erreur qui permettra de repérer la faille, ce qui impose une serie de tests « à l’aveuglette » qui permettront d’identifier la présence d’une faille ou pas !

Prenant un exemple :

On considère une application web avec une page profile.php avec le code ci-dessous :

//…
$user_id = stri_replace('union','',$_GET['user_id']);
$query = "SELECT * FROM profile WHERE user_id = $user_id" ;
if(!@mysql_query($query)){
	echo "Ce membre n'existe pas";
}
else{
	//Affichage des données du profil
}

Ce code semble sécurisé contre les injections classiques puisqu’il remplace le mot clé « union » qui peut permettre à un attaquant de sélectionner une nouvelle ligne et détourner la requête, toute-fois un attaquant malveillant peut l’exploiter!

Analysant cette requête :

profile.php?user_id=1

Cet appel affichera le profile de l’utilisateur ayant l’id 1 (généralement l’administrateur du site)

Que se passera t’il avec :

profile.php?user_id=1 AND 1=2

Logiquement 1 != 2, si le script n’affiche pas le profil c’est que la condition rajoutée a été exécutée dans la requête, on peut vérifier ça on rajoutant une condition qui retourne toujours true (profile.php?user_id=1 AND 4=4), si avec cette appel le profil de l’utilisateur ayant user_id=1 s’affiche, c’est que le script est vulnérable à une injection de type « Blind SQL Injection », alors là! La bonne nouvelle c’est que l’attaquant ne voit aucune information affichée, la mauvaise c’est qu’il peut facilement bruteforcer l’information en rajoutant des condition dans l’url et suivant l’affichage ou le non-affichage du profile, il peut donc comprendre si la condition qu’il a mise est correcte par la suite extraire les information caractère par caractère

Exemple permettant de vérifier que la version de mysql est 5:

profile.php ?user_id=1 AND version() MATCH 5

Voyant ce qu’un attaquant malveillant peut faire pour exploiter cette faille :

profile.php?user_id=1 and length(password)=32

cet appel illuste un test sur la longueur du champ password, généralement les passes sont cryptés en md5, si c’est le cas le profil s’affiche et ça facilite à l’attaquant la poursuite de son exploitation ! Un md5 est une chaine de caractère en hexadécimal [09-af] donc 16 possibilités pour chaque caractères, du coup les possibilités ne sont pas énormes, 16 test au maximum peuvent permettre d’injecter un caractère du champ password, ce qui donne 512 requêtes en total pour extraire le hash md5 de l’utilisateur ayant user_id = 1

Exemple :

profile.php?user_id=1 AND substr(password,0,1)= 0×66

Pour tester si le premier caractère est un « f » (0×66 correspond au code hexadécimal de la lettre f) ainsi selon l’affichage (ou non) du profil utilisateur l’attaquant peut facilement injecter le reste, évidement sans aucun message d’erreur affiché sur son écran !

Pour résumer: Une Blind SQL Injection est toujours exploitée grâce à un bruteforce à l’aveuglette on se servant d’une page vulnérable qui affiche une donnés X, selon l’affichage ou non de cette dernière on peut deviner les données se cachant derrière.

Comment sécuriser son application ?

Les bonnes pratiques à adopter pour éviter de se faire pirater son site sont généralement les mêmes que j’ai cité dans les deux premier tutoriaux : de manière générale : Ne jamais se contenter de cacher les messages d’erreur, pensez toujours à filtrer les entrées, rajouter toujours les « signles quotes » aux variables que vous usez dans vos requêtes SQL et filtrer toujours avec la fonction mysql_real_escape_string

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Mercredi le 19 mai 2010 à 01:18

Le réseau des sites web Renault piraté

Le réseau des sites web de la célèbre marque Renault, l’un des plus grands acteurs du marché automobile, a été piraté lundi 17 mai 2010 par un groupe de hackers s’intitulant « v4 Team ». Ces derniers ont pu avoir accès sur le serveur principale hébergeant toutes les extensions des domaines renault y compris renault.co.ma.

Suite à cette attaque massive, 52 sites officiels de renault ont été défigurés, affichant un message « by Q8 H4×0r renalut 0wn3d », les attaquant semblent exploiter une faille au niveau du serveur IIS6 tournant sous Windows 2003.

Liste des sites piratés:

  • renault.uz
  • www.renault.co.uz/v4.asp
  • renault.com.pk/v4.asp
  • www.renault.com.pr/v4.asp
  • www.renault.eu/v4.asp
  • renault.sg/v4.asp
  • www.renault.tg/v4.asp
  • www.nouveautes-entreprise.renault.fr/v4.asp
  • www.megane-hatch-fleet.renault.co.uk/v4.asp
  • empresas-novidades.renault.pt/v4.asp
  • megane-sport-tourer-empresas.renault.pt/v4.asp
  • www.scenic-empresas.renault.pt/v4.asp
  • www.nuevo-megane-sport-tourer-empresas.renault.es
  • renault.com.tj
  • renault.co.ma
  • www.renault.co.tt/x.asp
  • www.renault.cg/x.asp
  • www.renault.ec/x.asp
  • www.nouveau-scenic-entreprises…
  • www.renault.com.ly/x.asp
  • www.renault.mobi/x.asp
  • www.renault.my/x.asp
  • www.renault.com.py/v4.asp
  • renault.com.ro/v4.asp
  • www.renault.gen.in/v4.asp
  • renault.hn/v4.asp
  • renault.la/v4.asp
  • http://megane-estate-entreprises.renault.fr/v4.asp
  • http://nouveautes-entreprises.renault.com/v4.asp
  • renault.com.az/x.asp
  • www.renault.co.in/x.asp
  • renault.cm/x.asp
  • renault.gy/x.asp
  • www.renault.hk/x.asp
  • www.renault.mq/x.asp
  • www.renault.kg/x.asp
  • www.renault.sn/x.asp
  • www.renault.asia/x.asp
  • http://new-models-fleet.renault.co.uk
  • renault.co.th/x.asp
  • renault.com.pt/x.asp
  • renault.co.ve/x.asp
  • new-models-fleet.renault.co.uk
  • megane-sport-tourer-fleet.rena…
  • www.renault.biz
  • http://nueva-gama-empresas.renault.es/x.asp
  • renault.ht/x.asp

  • http://nuevo-megane-berlina-empresas.renault.es/x.asp
  • http://www.megane-berlina-empresas.renault.pt/x.asp
  • renault.bo/x.asp
  • nuevo-scenic-empresas.renault.es/x.asp
  • renault.vn/x.asp
  • Partager cet article:
    • Twitter
    • Facebook
    • Google Bookmarks
    • del.icio.us
    • Netvibes
    • viadeo FR
    • Digg
    • LinkedIn
    • Slashdot
    • Sphinn
    • Mixx
    • Blogplay
    • Identi.ca
    • Print
    • Ping.fm
    • email
    • Posterous
    • Reddit
    • Yahoo! Buzz
    • PDF
    • RSS
    • Diigo
    • Fark
    • Blogosphere News
    • blogtercimlap

Jeudi le 13 mai 2010 à 15:38

Joomla! 1.5: Comment modifier le fil d’ariane

Joomla breadcrumbsFil d’Ariane ou « chemin de fer » appelé aussi « breadcrumbs » est l’un des éléments indispensables dans un site web, il est souvent présent avant le contenu de toute page web et permet d’indiquer aux utilisateurs leur emplacement à l’intérieur du site. dans Joomla! 1.5 le fil d’Ariane est géré par un module « mod_breadcrumbs », ce dernier est géré principalement à partir de la partie « Menus » dans l’interface d’administration. Dans ce tuto on verra comment personnaliser ce dernier en ajoutant/modifiant ou supprimant des éléments.

Ajouter un élément en fin du fil d’Ariane

$breadcrumbs =& $mainframe->getPathWay();
$breadcrumbs->addItem(JText::_('NOM_ELEMENT') , JRoute::_('URL_ELEMENT'));

Ajouter un élément au début du fil d’arian

$breadcrumbs =& $mainframe->getPathWay();
$breadcrumsNames = $breadcrumbs->_pathway ;
$new_menu = new stdClass();
$new_menu->link = JRoute::_('URL_ELEMENT');
$new_menu->name = JText::_('JNOM_ELEMENT');
array_unshift($breadcrumsNames,$new_menu);
$breadcrumbs->_pathway = $breadcrumsNames ;

Vous l’avez bien compris? $breadcrumsNames (ligne 2) permet de récupérer l’ensemble des élements du fil d’Ariane sous forme de tableau qui contient des objets stdClass, chaque objet contient deux propriétés (link et name) qui corresponde respectivement au nom de l’élément et à l’url correspondant. Si on souhaite pas que l’élément du rajouté ne soit pas cliquable il suffit de mettre la propriété link à null, ainsi vous pouvez manipuler tous les élements du tableau comme ça vous chante et par la suite l’assigner à la variable $breadcrumbs (ligne 7)

J’espère que ce petit tuto vous sera utile, n’hésitez pas à poser des questions!

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Vu le très peu de documentation que j’ai pu trouvé au sujet du plugin sfFormExtraPlugin de symfony, voici un guide rapide qui vous permettra d’installer le plugin sfFormExtraPlugin et pouvoir afficher un calendrier pour les champs de type date grâce au widget sfWidgetFormJQueryDate, voici donc les étapes à suivre:

1 – Installer le plugin sfFormExtraPlugin

En mode console, positionnez vous sur le dossier d’installation du projet et exécuter :

./symfony plugin:install sfFormExtraPlugin

2 – Télecharger et mettre en place les librairies jQuery nécessaire

Malheureusement le plugin sfFormExtraPlugin n’inclue pas les librairies externes nécessaire au fonctionnement, il faut le faire à la main!

il faut donc télécharger JQuery et JQuery UI:

  • Allez sur le site de jQuery UI
  • Dans la liste des composants déchochez toutes les cases sauf Core et Datepicker
  • Sélectionner le thème qui vous convient à droite et cliquez Télécharger

3 – Placé les fichiers téléchargés dans le dossier web et modifier le fichier view.yml

Décompresser jquery-ui-1.8custom.zip et copier les fichiers décompresser vers le dossier web ainsi:

  • js/jquery-1.4.2.min.js et js/jquery-ui-1.8.custom.min.js dans le dossier /web/js
  • css/jquery-ui-1.8.custom.css dans le dossier /web/css
  • renommer le dossier css/theme/images/ en jquery-ui-images et mettez le dans /web/images/
  • Ouvrez le fichier /web/css/jquery-ui-1.8.custom.css et remplacer « images/ » par « ../images/jquery-ui-images/ » pour corriger le chemin vers les images
  • calendar.png une petite icône qu’on affiche à coté du champs pour faire joli :p (à mettre dans /web/images/)

Maintenant il faut inclure les fichiers javascript et css dans view.yml de notre application (par exemple /apps/backend/config/view.yml) :

Ajout du fichier javascript

    javascripts:    [jquery-1.4.2.min.js, jquery-ui-1.8.custom.min.js]

Ajout du fichier css

    stylesheets:    [jquery-ui-1.8.custom.css]

4 – Mise en place du Widget dans la classe du formulaire

class PrescripteursForm extends BasePrescripteursForm
{
  public function configure()
  {
    $this->widgetSchema['date_debut'] = new sfWidgetFormJQueryDate(array('image'=>'/images/calendar.png'));
    $this->widgetSchema['date_fin'] = new sfWidgetFormJQueryDate(array('image'=>'/images/calendar.png'));
  }
}

Et le tour est joué ;) ça devrai ressembler à ça :


Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Mercredi le 31 mars 2010 à 15:45

Sauvegarder et restaurer vos base de données mysql

Il vous ai jamais arrivé un jour de perdre des données? Combien de temps vous il vous a fallu pour les recréer? ouais ouais c’est difficile, du chagrin et des larmes.. l’être humain n’est pas fiable, bien que le matériel moderne a de plus en plus tendance de l’être. Tous les données ont une valeur, la récréer demande du temps et beaucoup de travail d’où l’importance de la sauvegarde!

Dans ce billet on verra comment sauvegarder et restaurer vos bases de données mysql!

Quels outils?

mysql et mysqldump sont deux commandes disponibles dans mysql qui nous permettront d’effectuer une sauvegarde ou une restauration! on considère que le nom du serveur est 192.168.1.10, l’utilisateur est root et le mot de passe est p455wD

Faire un backup

Pour faire un dump de la base mabase il suffit d’exécuter la commande mysqldump:

mysqldump -h192.168.1.10 -uroot -pp455wd > backupmybase.sql

d’où backupmybase.sql et le fichier qui contiendra le backup et sera crée après exécution de la commande mysqldump

Restaurer une base de données à partir d’un backup

C’est via la commande mysql elle même :

mysql -h192.168.1.10 -uroot -pp455wd < mybackupbase.sql

les signes < et > permettent de rediriger la sortie d’une commande respectivement en lecture et écriture

Sauvegarder toutes les bases de données en une seule commande

mysqldump --user=root --password=p455wd --all-databases | gzip > all_mysql_databases.sql.gz

Créer un script de sauvegarde pour faire un backup de toutes les bases de données

Parfois on a besoin de faire des backups réguliers sans avoir à installer des outils spécialisés sur nos serveurs comme cpanel ou autres, j’ai créé pour vous ce petit script qui permet de faire cela avec la possibilité de supprimer les anciens backup datant de X jours (10 dans notre cas). Créez donc un fichier mysqlbackup.sh contenant le code suivant

# Adresse du serveur
mysql_host="192.168.1.10"
# Nom d'utilisateur mysql
mysql_user="mcherifi"
# Mot de passe mysql
mysql_pwd="p455wd"
# Répertoire de sauvegarde
backup_dir="/home/simo/"
# Nombre de jour pour suppression des anciens backups
delete_after=10

# DEBUT DU SCRIPT
date_debut_sauvegarde="$(date +"%d-%m-%Y")"
current_backupdir=$backup_dir"/"$date_debut_sauvegarde

[ ! -d $backup_dir  ] && mkdir -p $backup_dir  || :
[ ! -d $current_backupdir  ] && mkdir -p $current_backupdir  || :

find ${backup_dir}* -mtime +$delete_after -exec rm -f {} \;
for i in `mysqlshow -h $mysql_host --user=$mysql_user --password=$mysql_pwd | awk -F "^| " '{print $2}' | grep -v '^$'`
do
mysqldump -h $mysql_host --user=$mysql_user --password=$mysql_pwd --add-locks --add-drop-table $i | gzip > $current_backupdir"/"$i.sql.gz | grep '^$'
done;

et voilà le script tout prêt!

Rendre la sauvegarde périodique avec crontab

Crontab est un outil permettant d’exécuter des taches réguliers à un temps précis, on l’utilisera dans notre cas pour effectuer des sauvegarde quotidienne de nos base de données mysql!

Il existe plusieurs répertoires créés par cron permettant d’exécuter des taches régulières:

  • /etc/cron.hourly : les scripts exécutés chaque heure.
  • /etc/cron.daily : les scripts exécutés chaque jour.
  • /etc/cron.weekly : les scripts exécutés chaque semaine.
  • /etc/cron.monthly : les scripts exécutés chaque mois.

Pour exécuter notre script chaque jour, il suffit de le placer dans le répertoire /etc/cron.daily est le tour est joué! toute fois il est possible de préciser le temps exacte d’exécution du script il faut créer un fichier contab avec la commande :

crontab -e

la commande ouvrira l’éditeur de texte standard vi, si vous ne sentez pas à l’aise avec vi, consultez sa documentation officielle

après ajoutez le code suivant à la fin de votre fichier (en mettant le bon chemin du fichier backup.sh) :

0 23 * * *  /home/simo/mysqlbackup.sh

Il ne reste que quittez vi et sauvegarder notre tache avec (Echap:wq)

  • 0 23 * * * Signifie que le script sera exécuté chaque jour à 23h00
  • /home/simo/mysqlbackup.sh est le chemin où se trouve le script de sauvegarde

Cliquez ici pour télécharger le script mysqlbackup.sh, en espérant que ce tutoriel vous sera utile!

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Vendredi le 5 février 2010 à 11:59

L’EMI organise Linux Party le 06 et 07 fevrier 2010

Linux Party EMI 2010

Linux Party EMI 2010

Sous le thème « L’Open Source, Bilan Ouvertures et Horizons », et comme chaque année depuis 5 ans, les étudiants de l’École Mohammadia d’Ingénieurs organisent la 6ème Edition de Linux Party, une édition qui durera 2 jours pendant lesquels 12 ateliers de démonstration seront ouverts au public, encore un évènement incontournable qui aura le mérite de rassembler les Linux Addict et geeks du royaume!

Des membres de la communauté Ubuntu Maroc seront également présents, et contribueront à leurs tour dans cet édition!, une table ronde aura lieu et sera marquée par la présence des personnalités éminentes dans le domaine informatique et plus particulièrement par les adeptes du libre!

Je trouve que le thème « L’Open Source, Bilan Ouvertures et Horizons » est très réussi comme choix! Le déploiement des solutions libre dans les SI au Maroc est de plus en plus répondu, et permet un gains énorme en terme de coût et de performances! Plusieurs solutions OpenSource ayant prouvé leurs efficacité seront présentés et mises en pratique durant l’évènement..

Le monde du libre retrouve de plus en plus sa place au Maroc ;), Linux Party est LIBRE à tous, je vous invite donc à venir nombreux!

Source: http://www.emi.ac.ma/linuxparty/

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Photo by Foomandoonian sous Creative Common

Photo par foomandoonian

L’une des problématiques qu’on rencontre souvent sous Firefox c’est quand on installe la version la plus récente, on risque de perdre la moitié des extensions installées! pour la simple raison que ces extensions ne sont pas compatible avec la dernière version, et c’est souvent embêtant d’attendre que l’éditeur de l’extension la mets à jour pour que ça marche!

Dans ce tutorial, je vous montrerai une astuce que j’utilise très souvent pour faire marcher mes extensions « périmées » sur une nouvelle version de Firefox!

Comment ça marche?

Les extensions Firefox sont des fichiers qui portent le format .xpi, c’est enfaite juste un paquet .zip renommé en .xpi, si on le renomme et on le décompresse on trouve qu’il contient un bon nombre de fichiers, parmi ces dernier on trouve:

  • [DIR] chrome
  • [DIR] defaults
  • install.rdf (le fichier qui nous interesse)

Il se peut que vous trouvez d’autres fichiers/répertoires ça dépend de l’extension que vous avez téléchargé, pour cet exemple j’ai choisis TamperData, une de mes extensions indispensables! vous aurez donc à re-télécharger le .xpi de votre extension « périmée » depuis le site de son éditeur ou de mozdev.org puis continuant..

A quoi sert install.rdf?

Le fichier install.rdf permet de déterminer les informations concernant le plugin Firefox, ces informations sont représentées en XML sous forme de balises metadata et permettent de définir la version, auteur, versions compatibles, mise à jours etc.., et de tout ça ce qui nous importe est :

install.rdf

Vous l’avez bien compris! c’est le champ maxVersion qu’il faut modifier pour que votre extension marche sur la dernière version récemment sortie! Mettez le numéro de la dernière version ou même plus si ça vous chante, compresser à nouveau le répertoire en ext.zip et renomer le en .xpi, faite le glisser sur une fenêtre firefox, et hop ça marche!

L’avantage de cette astuce c’est que ça vous éviderai de croiser les mains pendant une demi journée (voir plus) à attendre que l’éditeur d’une extension met à jour son install.rdf, (c’est vous qui le fait à sa place :P)

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Mercredi le 30 décembre 2009 à 14:04

PHP Convertir un tableau en objet stdClass

Hola les amis!

Travailler avec des tableaux en PHP est parfois embêtant, surtout quand il s’agit d’un long tableau avec une dizaine d’éléments, je préfère écrire

$obj->element1->element2->element3

plutôt que

$obj['element1']['element2']['element3']

Dans ce tutoriel on verra comment convertir une variable de type Array à un objet de type stdClass:
On considère le tableau suivant :

$tab = array(
	'key1' =>; 'Hello',
 	'key2' => array(
			'subkey1'=>'subval1',
			'subkey2'=>'subval2',
			'subkey3'=> array('foo'=>'bar')
		  )
        );

Première méthode : Type Casting

Le type casting est une méthode qui consiste à forcer le type d’une variable en la précédant du type voulu, exemple :

function array_to_object($tab)
{
  return (object)$tab ;
}

$tab = array(
	'key1' => 'Hello',
 	'key2' => array(
			'subkey1'=>'subval1',
			'subkey2'=>'subval2',
			'subkey3'=> array('foo'=>'bar')
		  )
        );

print_r(array_to_object($tab));

Cette méthode marche, mais elle n’est pas récursive, du coup seules les premiers éléments du tableau sont convertis en objets stdClass (key1,key2), le subkey3 reste toujours de type Array :

stdClass Object
(
    [key1] => Hello
    [key2] => Array
        (
            [subkey1] => subval1
            [subkey2] => subval2
            [subkey3] => Array
                (
                    [foo] => bar
                )
        )
)

Pour accéder à la valeur de la clé « foo », du sous-tableau « subkey3″ on doit faire : $tab->key2['subkey3]['foo'], ce qui est un peu chiant, on doit donc parcourir le tableau de façon récursive pour obtenir : $tab->key2->subkey3->foo!

Deuxième méthode: une fonction array_to_object()

function array_to_object($tab)
{
	$data = new stdClass ;
	if(is_array($tab) &amp;&amp; !empty($tab))
	{
		foreach($tab as $key => $val)
		{
			if(is_array($val))
				$data->$key = array_to_object($val);
			else
				$data->$key = $val ;
		}
	}
	return $data ;
}

$tab = array(
	'key1' => 'Hello',
 	'key2' => array(
			'subkey1'=>'subval1',
			'subkey2'=>'subval2',
			'subkey3'=> array('foo'=>'bar')
		  )
        );

print_r(array_to_object($tab));

Résultat d’exécution :

stdClass Object
(
    [key1] => Hello
    [key2] => stdClass Object
        (
            [subkey1] => subval1
            [subkey2] => subval2
            [subkey3] => stdClass Object
                (
                    [foo] => bar
                )
        )
)

Et voilà, tout est objet! ainsi on peut faire : $tab->key2->subkey3->foo ce qui est plus joli à mon gout =)

Happy coding

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

ubuntu_marocMes amiiis!!
Aujourd’hui je suis très content de vous annoncer que Ubuntu Moroccan Team est désormais officiellement reconnu par la communauté Ubuntu, et oui! c’est bien le moment pour que les défenseurs du libre marocains, geeks et fan de l’opensource de disent leur mot ;)

Je tiens à féliciter tous les membres grâce auxquels ubuntu-ma a fait ce grand pas! Puis étant utilisateur d’ubuntu, j’invite tous les marocains utilisateurs et passionnés de GNU/Linux à rejoindre la communauté, participer et donner une vie à ce groupe.

J’en profite aussi pour vous annoncer L’install party de la dernière version Karmic, qui aura lieu à Eljadida le 26 Décembre 2009, n’hésitez donc pas à vous joindre ç la liste, inscrivez vous également à la liste de diffusion ubuntu-ma@lists.ubuntu.com pour rester à jour ;)

Tout ça c’est beau, Rendez-vous donc le 26 Déc, et surtout.. venez nombreux!

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Jeudi le 10 décembre 2009 à 18:07

[VIDEO] : Python or PHP? that is the question!

Python ou PHP pour le développement WEB? humm, c’est une question à laquelle je peux pas répondre, c’est vrai ça fait quelques mois que je m’intéresse à python, particulièrement au framework django qui me parait super élégant en terme d’ergonomie et l’implémentation du pattern MVC OO, mais bon ce n’est pas notre sujet, j’y reviendrai dans un prochain billet peut être!

Je vous invites à voir cette vidéo trop marrante réalisée par Thibault Jouannic, j’espère que vous aimerai bien :D

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Categories

Derniers commentaires

  • Victor: Roseny : Pour avoir les mois en Français voici mon code : $dateWidget = new sfWidgetFormI18nDate(array(...
  • abdessamad: Salam, Salutation pour cet article, N.B :  » Un md5 est une chaine de caractère en hexadécimal...
  • 0x1337: Nice tuto bien structuré et synthétisé ! La question qui se pose est ce un attaquant peut faire un Privilege...
  • Roseny: Bonjour, comment fais-t’on pour mettre les mois en français?
  • Laurent: Bonjour Mohammed et merci pour ce tuto. Que faut-il modifier pour que le champ date soit en un seul bloc au...
  • Stack: dommage que le co.ma était hacké aussi
  • Technologix: Très bon article, gg ;)
  • Wail: très bien expliqué mon khoya, génial
  • UpDeL: Respect !
  • El King Zizou: trés bonne explication j’aimerai bien voir des autres articles des attaques sur le web :)...

Flickr PhotoStream

  • Au dessus des montagnes
  • Nuages
  • Insolite hopital marocain
  • Plage bouznika
  • Maroc Blog awars with vladimire
  • Linux Party 2010 - EMI (Maroc)
  • Mawazine 2008
  • Essaouira
  • Rabat Ville with baba mimoun
  • Fucking CowBoyz
  • Essaouira 2009 - En attente de l'arrivé du cheb khaled!
  • Linux Install party Mohammadia

Twitter Feed


Warning: fread() [function.fread]: Length parameter must be greater than 0 in /homepages/44/d193174039/htdocs/mcherifi/wp-content/plugins/wordpress-twitter/BiBTweets.php on line 199
  • mcherifi: Underground Parking System http://bit.ly/aI440T original! le 27 Jul 2010 10:58
  • mcherifi: @halflings un moment j'ai pensé qu'il s'agit d'une erreur, c'est en lisant bien que j'ai compris que ya aussi #freelansing lol le 27 Jul 2010 10:38 en réponse à halflings
  • mcherifi: Comment réaliser sa première photographie en freelensing? http://bit.ly/daZewv le 27 Jul 2010 09:45
  • mcherifi: Une nouvelle loi vient d’être adoptée en #Tunisie , elle intérdit les fessées données aux enfants! Qu'allez vous faire si c'était au #Maroc ? le 26 Jul 2010 16:57
  • mcherifi: Faut-il suivre ses passions ou s’orienter vers du lucratif ? http://bit.ly/99Nsiu le 26 Jul 2010 16:30
  • mcherifi: Safari v4 & v5 critical vulnerability in the AutoFill feature http://bit.ly/9yVKco #safari #security #autofill le 26 Jul 2010 14:41
  • mcherifi: RT: @agharass : Est ce que vous avez un compte http://meme.yahoo.com ? Plz RT le 24 Jul 2010 21:20
  • mcherifi: @A_T_J pas encore mon ami, la soirée vient à peine de commencer ;) ce n'est pas qu'on tweetant pas qu'on dors :P le 24 Jul 2010 03:06 en réponse à A_T_J
  • mcherifi: Trop drôle! Insultes de développeurs http://ping.fm/SKdvT #fordeveloppersonly le 20 Jul 2010 09:02
  • mcherifi: Si vous aimez les pentests voici un ISO pour s'entrainer avec l'OS le plus vulnérable au monde http://ping.fm/a5rKi #damnvulnerablelinux le 20 Jul 2010 08:58
  • mcherifi: Oulah! c'est mon 1000 tweet, Happy day à tous! le 20 Jul 2010 08:56
  • mcherifi: Frameworks PHP: Symfony vs CodeIgniter http://ping.fm/MnLvy le 14 Jul 2010 15:42
  • mcherifi: D'ici fin juillet, l'enveloppe annuelle de la compensation sera déjà épuisée ! Que va faire l'Etat ? http://ping.fm/t2ym2 le 14 Jul 2010 14:00
  • mcherifi: Real Social Dynamics Nation : Smart people http://ping.fm/g2zfw le 14 Jul 2010 11:26
  • mcherifi: just achieved all WabLab HackMe challenges http://bit.ly/dClKUj Actual Rank: Morocco 1, World 10, waiting for the next contests.. le 11 Jul 2010 16:52
  • mcherifi: le monde est fondé sur des conventions, ce que accepte la majorité est souvent ce qui est adopté même si il est faux! le 11 Jul 2010 10:49
  • mcherifi: Youpii, ma carte son Creative Sound Blaster Live marche à merveille sous Ubuntu Lucid lynx, VIVA LINUX <3 ! le 10 Jul 2010 22:20
  • mcherifi: si vous avez du mal avec les dns google voici une version standalone du chat audio/video dans gmail 3http://ping.fm/S76qv le 06 Jul 2010 15:32