mercredi 29 décembre 2010

Le piège JavaScript avec undefined

C'est sûre que vous déjà utilisé la propriété undefined en JavaScript pour vérifier si une variable a été assignée. Soit l'exemple:

var app = new Object();
var a = '';
var b;

app.isDefined = function(value){
   return value !== undefined;
}

console.log( app.isDefined(a) ? 'defined' : 'undefined' );
console.log( app.isDefined(b) ? 'defined' : 'undefined' );

Logiquement, On s'attend à ce que la variable 'a' soit définie alors que 'b' ne le soit pas Mais qu'arriverait-t-il si on définissait volontairement une variable undefined dans ce script ou involontairement lors de l'inclusion d'une librairie externe ? Le concept de closure viendrait introduire une vulnérabilité :

var app = new Object();
var a = '';
var b;

var undefined = 4; // oups...

app.isDefined = function(value){
   return value !== undefined;
}

console.log( app.isDefined(a) ? 'defined' : 'undefined' );
console.log( app.isDefined(b) ? 'defined' : 'undefined' );

Dans ce cas-ci, les deux appels retourneraient 'defined'.

L'idéal serait de ne jamais se fier à la propriété undefined, à moins de la redéclarer à l'intérieur de la fonction qui compte l'utilise.Ainsi, on évitera les mauvaises surprises reliées à ce genre de pratique.
  
var undefined = 4; // ok
app.isDefined = function(value){
   // sans danger pour le undefined dans la portée globale
   var undefined;
   return value !== undefined;
}

dimanche 5 décembre 2010

Ajout d’un virtual host pour un projet symfony

  Cet article se trouvait quelque part dans mes brouillons il y a pas mal de temps mais je ne trouvais pas le temps de l’adapter pour le blog.. Voilà je me retrouve de nouveau avec un projet symfony alors je me suis dit que c’est le moment de le mettre.
  Je commence par expliquer le résonnement pour configurer un virtual host sur un serveur local. Et ensuite je passe à la configuration du serveur pour un projet symfony.


  1. Ajout d’un virtual host sur un serveur local
  Lorsqu’on développe des projets personnels, on utilise souvent le poste de travail comme laboratoire et on accède à nos différents projets à partir de http://localhost (127.0.0.1).
  Cependant, plutôt que de créer chaque projet dans un répertoire à la racine du répertoire www d'Apache, je préfère utiliser ce qu'on appele un hôte virtuel (VirtualHost ou vhost). Je peux donc placer mes projets à différents endroits sur mon poste. Pour chaque projet, je crée ensuite un sous-domaine à localhost. Par exemple si mon premier projet est placé dans www : http://localhost/projet1/ deviendra http://projet1.localhost/. Ainsi, je peux continuer à programmer en utilisant la racine du répertoire comme référence, comme si le projet était en ligne sur son propre nom de domaine.
  Voici la configuration possible pour Apache:
  1. D'abord, je crée deux projets, le premier dans le répertoire www d'Apache, le deuxième à un autre endroit, par exemple sur la partition D:
  2. On doit accéder au fichier httpd.conf d'Apache (C:\Program Files\EasyPHP 2.0b1\conf_files\) et s'assurer que la ligne suivante n'est pas commentée :
        Include conf/extra/httpd-vhosts.conf
  3. Ouvrez le fichier httpd-vhosts.conf (C:\Program Files\EasyPHP 2.0b1\apache\conf\extra\) et ajouter un hôte virtuel pour chaque projet :


NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "C:\Program Files\EasyPHP 2.0b1\www\projet1"
ServerName projet1.localhost
</VirtualHost>
<VirtualHost *:80>
DocumentRoot D:\Programmation\Web\projet2
ServerName projet2.localhost
</VirtualHost>

  4. Dans le fichier hosts (Sous XP : C:\WINDOWS\system32\drivers\etc\), ajoutez une ligne pour chaque projet :
127.0.0.1 projet1.localhost
127.0.0.1 projet2.localhost
  5. Redémarrez Apache (pour que la nouvelle configuration prenne effet. EasyPHP a un raccourci pour le redémarrer à partir du système tray)
6. Ouvrez un invite de commande et exécutez la commande suivante  :
            ipconfig /flushdns
 7. À partir de votre fureteur préféré, tester l'accès à http://projet1.localhost et à http://projet2.localhost. Le tout devrait maintenant fonctionner.

  Bien entendu, il s'agit d'une configuration de base alors j'ai volontairement omis certains détails qui auraient pu être inclus.
  
     2. Configuration d’un serveur web pour un projet symfony
  
  Pour un projet symfony, il est préférable de configurer des serveurs virtuels plutôt que d'ajouter un nouveau port à chaque fois qu’on démarre un nouveau projet. Au lieu de choisir un port et d'ajouter une déclaration Listen, on choisit un nom de domaine (par exemple le nom du domaine réel avec .localhost ajouté à la fin) et ajouter une déclaration ServerName :

# C'est la configuration pour votre projet
<VirtualHost 127.0.0.1:80>
ServerName www.monprojet.com.localhost
<!-- same configuration as before -->
</VirtualHost>


Le nom du domaine www.monprojet.com.localhost utilisé dans la configuration d'Apache doit être déclaré localement. Ce fichier se trouve dans le répertoire :
C:\WINDOWS\system32\drivers\etc\.
On ajoute la ligne suivante :
127.0.0.1 www.monprojet.com.localhost
Autre méthode peu commode est d’ajouter un port d’écoute Listen avant de déclarer notre host dans dans le fichier httpd.conf de Apache :

Listen 127.0.0.1:8080
<VirtualHost 127.0.0.1:8080>
DocumentRoot "d:\wamp\www\monprojet\web"
DirectoryIndex index.php
<Directory "d:\wamp\www\monprojet\web">
AllowOverride All
Allow from All
</Directory>
Alias /sf "C:\wamp\php\PEAR\pear\data\symfony\web\sf"
<Directory "C:\wamp\php\PEAR\pear\data\symfony\web\sf">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>



L'alias /sf donne accès à des images et des fichiers JavaScript nécessaire pour afficher correctement les pages symfony par défaut et la barre d'outils web de débogage. Cette configuration permet à Apache d'écouter le port 8080 sur la machine, de sorte que le site web sera accessible à l'adresse suivante :
http://~localhost~:8080/
On peut changer 8080 par un autre nombre, mais on doit favoriser des nombres plus grand que 1024 car ils ne nécessitent pas de droits administrateurs.

mardi 16 novembre 2010

Génération d’un fichier Excel en PHP à partir de la classe COM

Bonsoir et désolé pour ce retard. J’étais trop occupée les dernières semaines...  
Je vous explique  la méthode de la génération d’un fichier Excel en PHP à partir de la classe COM. Très efficace pour jouer le tour à un prof au cours d’une validation =) .Certes inefficace pour un vrai projet sur un serveur UNIX. Je vous explique ce problème en détails dans la dernière partie.   
La classe COM vous permet d'instancier un objet COM compatible OLE, d'appeler ses méthodes et d'accéder à ses propriétés.
La syntaxe sous forme d’un exemple -trop simple- :

<?php
// On définie une constante FILENAME comprenant le nom du fichier à générer et son emplacement.
define("FILENAME","C:/fichier.xls");

if(file_exists(FILENAME))  // On vérifie que le fichier existe.  
{
        unlink(FILENAME);  // Suppression du fichier précédemment créé s'il existe.
}

$excel=new COM("Excel.application"); //Instanciation de l'objet COM
$excel->sheetsinnewworkbook=1;//1 seule feuille de calcul dans le document
$excel->Workbooks->Add();//Ajout d'un classeur
$book=$excel->Workbooks(1);//$book contient le classeur actif
$sheet=$book->Worksheets(1);//$sheet contient la feuille active
$sheet->Name="Nom de votre feuille";//Attribution d'un nom à la feuille

// 1ere ligne du fichier excel     
$cell=$sheet->Range('A1');  //placement de la cellule
 $cell->value='wafa bouaynaya';  //valeur de la cellule
$cell->Font->bold = true; //en gras ou non
$cell->Interior->ColorIndex=23; // fond de la cellule bleu
$cell->EntireColumn->ColumnWidth=5;
$cell->Font->ColorIndex=2; //font color blanc
$cell->Font->Size=13; //font size 13

//fermeture du fichier excel
$book->saveas(FILENAME);
unset($sheet);
unset($book);
$excel->Workbooks->Close();
$excel->Quit();
unset($excel);
?>
 Et voilà, notre exemple est fini. Pour avoir la liste complète des références de couleur : http://www.mvps.org/dmcritchie/excel/colors.htm
Pour plus de détail: http://fr2.php.net/manual/fr/class.com.php

Cependant, le modèle objet COM d'Office (et donc d'Excel) n'a pas été conçu pour un usage en mode serveur sans interface. C'est un modèle purement client pour 2 raisons:

1 - si l'application Office se met à "prompter" l'utilisateur, personne ne peut répondre dans un logique serveur
2 - le modèle objet n'est pas "thread-safe", c'est à dire (qu'en gros) qu'il ne supporte mais un environnement fortement concurrent/multi-threadé comme un environnement serveur.

Du coup, le seul cas intéressant est plutôt avec un client lourd sur Windows. C’est pour ça que j’ai dis que ce tour est efficace sur nos ordinateurs portables en local et non pour un projet hébergé sur un serveur UNIX.

Pour générer des fichiers Office côté serveur, le mieux est de le faire en générant soit-même les fichiers au format Open XML à l'aide éventuellement du SDK associé : http://msdn.microsoft.com/fr-fr/office [...] .2.0.sdk.aspx . Sinon PHPExcel apparait comme la meilleure des solutions.. 


               

mardi 21 septembre 2010

Quand les faux anti-virus inspirent les vrais

L’éditeur Check Point, qui publie l’outil de sécurité ZoneAlarm (qui intègre anti-virus et firewall), s’attire depuis quelques jours l’hostilité d’une partir de ses clients en adoptant un bien curieux procédé marketing : la version gratuite de ZoneAlarm diffuse désormais des alertes sur le poste de l’utilisateur, visant à l’effrayer et à l’inciter à acheter la version complète du produit. Ces alertes "informent" les internautes sur le fait que leur ordinateur est "peut-être" affecté par un risque de sécurité élevé, lié à un nouveau malware, et les incitent fortement à se protéger à l’aide d’une "sécurité additionnelle".

Tous les codes visuels ont été empruntés aux éditeurs de faux logiciels anti-virus, qui cherchent à provoquer la panique de l’internaute et l’achat impulsif en simulant une menace à laquelle il n’est pas réellement exposé. Suite à la diffusion de cette alerte, bon nombre d’internautes cherchent un avis sur le web sur la fameuse menace "ZeuS.Zbot.aoaq", qui n’est rien d’autre qu’une énième variante -- peut-être même une simple mutation par réagencement du code -- du malware ZeuS qui circule depuis des années. Pas une révolution, donc.

En conséquence, des internautes effrayés cherchent conseil sur les forums des logiciels anti-virus, notamment sur ceux d’Avast, d’AVG et de MalwareBytes ; des messages demandent en effet si ces anti-virus détectent la fameuse variante "ZeuS.ZAbot.aoaq". Curieusement, certaines de ces questions sont posées par des internautes s’étant inscrit le jour même (17 septembre) sur les forums, et étant vierges de tout message antérieur. Ce n’est peut-être qu’une coïncidence, et on dira peut-être que je vois le mal partout, mais en matière de webmarketing "noir", une technique bien connue pour générer du buzz consiste justement à s’inscrire sur des forums thématiques sous différents pseudonymes pour y poser des questions bien ciblées, de sorte qu’une seule réponse est possible. Et en l'occurrence, le site de ZoneAlarm fournit une réponse prête à l’emploi, en prétendant que seul ZA détecte cette variante. Ce site se garde bien de mentionner que le moteur anti-virus de ZA est conçu par Kaspersky, et qu'il est donc fortement probable que ce dernier détecte la souche virale en question.

jeudi 2 septembre 2010

Nettoyer le spooler d'impression

  J'aborde aujourd’hui un sujet de maintenance qui s’avère ennuyeux au file de temps (pour moi en tout cas): Chaque fois que je commence des travaux d’impression sous Windows  je me retrouve avec une file d’attente à cause d’un document bloqué. Ni l'annulation de ce document, ni la purge de la file d'attente ne résolve le problème.

  Je passe parfois des heures à me battre avec l’imprimante ou le PC et à me lamenter sur mon sort. Pfffff !! C’est vraiment déraisonnable : une informaticienne qui se bloque à cause d’une panne d’impression.

  Finalement, il s’est avéré possible de remédier à ce problème  avec 2 lignes de commande. Pour ce faire, il suffit de relancer le service du spouleur d'impression :
  •   Stoppez le service du spouleur d'impression en ouvrant une invite de commandes, puis en validant la commande suivante :
                           net stop spooler
  •   Démarrez à nouveau le service du spouleur d'impression en saisissant la commande suivante :
                          net start spooler

Tous les travaux d'impression devraient désormais être débloqués.

mardi 31 août 2010

Pirater un site web par FTP

Cette technique n’est plus vraiment à la page puisqu’on trouve de moins en moins des sites non sécurisés. Mais on peut toujours essayer.
  1. Démarrer/Exécuter et tapez : ftp -n
  2. Vous allez avoir sous Dos évidemment : ftp>_
  3. Tapez open url_du_site Par exemple : open http://www.monsite.com
  4. Vous allez être connectés au site. Tapez: quote user ftp
  5. Il vous demande le password. Tapez alors : quote cwd ~root
  6. Il vous demande le login et la Password: Tapez alors : quote pass ftp
  7. Si il vous répond 230 Anonymous user logged in, vous êtes connecté au serveur. S’il a marqué 530 User ftp cannot log in, c’est que le site est sécurisé

lundi 30 août 2010

Le Bienvenue


  Un premier réflexe pour quelques visiteurs : ‘Pfffff !!  Un nième frimeur qui se croit capable d’attirer les attentions avec des anciennes astuces de développement… ’
  En faite, très chères visiteurs, mes astuces de développement ne sont pas en ligne pour enrichir vos projets et applications. C’est juste que j’ai besoin d’un support en ligne et les 140 caractères que me proposent  twitter ne sont pas suffisants pour garder toutes mes remarques.
  Bien évidemment, tout le monde peut s’en servir…
  Une bienvenue pour moi et pour vous dans un second lieu.