Archive -> php time

Xdebug, outil de debug pour PHP

Xdebug est une extention PHP qui va vous aider à obtenir des informations utiles au debugage de vos script ainsi qu’à tracer la performance ou les enventuelles erreurs de vos scripts.

Il existe des version pour Linux et pour l’autre. J’ai oublié le nom de l’autre mais je sais qu’il ne faut surtout pas mettre un server php dessus. Par contre pour jouer au dernier jeux vidéo vous pouvez utiliser l’autre.

Bon revenons à nos moutons. Perso j’ai installé Xdebug par un simple urpmi (appt-get pour les nuls qui sont sur mandriva, comme moi, j’en parle ici) donc si vous voullez plus d’info sur la procédure d’installation voyez ici.

Les fonctionalités d‘xdebug sont les suivantes :

  • Affichages des erreurs trés complet et paramétrable.
  • Controle la récursivité des fonctions (par defaut limité à 64)
  • Suivit de l’allocation de mémoire
  • Traçage vos erreurs
  • Faire du profiling, trés utiles pour annalyser vos script, gérer la charge mémoire et optimiser en conséquences
  • Utilisation d’un client de débugage possible

__(‘Lire la suite »’)

Comments (2)

What’s new in PHP V5.2

Je suis tombé via nexen sur un site d’IBM pour les developpeurs qui présente quelques  nouveautés de PHP 5.2 en détail.

C’est trés interessant et bien complet.

Il y’a 4 articles :

Using the new ZIP extension

Using the new JSON extension

Using the new input filtering extensions

Using the new memory manager

Bonne lecture anglaise les AmisDesBois 😉

Comments (1)

Never Trust Foreign Data

Suite à la lecture d’un article sur Developpez.com j’ai décidé de vous écrire un petit article sur une faille XSS en PHP.

Tout bon développeur web se doit de connaître la régle « Never trust foreign data » (Ne jamais faire confiance aux données étrangères) . Nous connaissons tous très bien les problèmes que peuvent causer des injections de code malicieux par POST ou GET, mais cette fois ci, c’est une injection par la variable $_SERVER[‘PHP_SELF’] que je vais vous présenter.

Pour rappel :

PHP_SELF
Le nom du fichier du script en cours d’exécution, par rapport à la racine web. Par exemple, $_SERVER[‘PHP_SELF’] dans le script situé à l’adresse http://www.monsite.com/test.php/foo.bar sera /test.php/foo.bar. La constante __FILE__ contient le chemin complet ainsi que le nom du fichier (i.e. inclut) courant. Si PHP fonctionne en ligne de commande, cette variable contient le nom du script depuis PHP 4.3.0. Dans les versions antérieures, cette variable n’était pas disponible.

Comme la doc PHP nous le montre bien, $_SERVER[‘PHP_SELF’] contient tout ce qu’il y a entre les premier slash suivant le domaine et le point d’interrgation qui nous permet de passer des variables dans l’url. L’utilisateur a donc la possibilité d’agir sur cette variable par le biais de l’URL qu’il saisira dans son navigateur : il ne faut donc plus avoir une confiance aveugle en cette variable.

C’est en partant de cette remarque qu’il a été découvert une possible injection de code malicieux. Voyons tout de suite un exemple : construisons un simple formulaire HTML :




Faille $_SERVER['PHP_SELF']


'.print_r($_POST, true).'

';
}
?>


Login
Password



En appelant cette page par une URL classique (http://127.0.0.1/index.php par exemple) et sans aucune mauvaise intention , tout se passe correctement : le formulaire s’affiche et lorsqu’on le soumet on a l’affichage du tableau $_POST; mais une personne mal intentionnée pourrait facilement injecté un code javascript en utilisant une URL du type :

http://127.0.0.1/failleSelf/index.php/%22%3E%3Cscript%3Ealert(‘Injection’)%3C/script%3E%3Cdata%22

Qui donne une fois décodée : http://127.0.0.1/index.php/ »><script>alert(‘Injection’)</script><data »

En appelant la page de cette manière vous réalisez une injection de code Javascript qui se traduira par l’affichage d’une joli boîte de dialogue. Bien sûre ce type d’injection peut conduire à des dommages bien plus importants.

Pour plus de détails sur cette faille, je vous renvoie vers l’article original sur Developpez.com.

Pendant que nous sommes dans les failles, j’en profite pour vous donner un lien vers un site qui peut être très utile : Milw0rm : ce site répertorie différentes failles trouvées sur plusieurs types d’applications; vous remarquerez d’ailleurs très facilement le message sur la page d’accueil indiquant que nous sommes dans le mois du PHP 😀

Comments (4)

PHP dans le monde

Etude de juillet mais que j’avais pas vut, donc pour ceux qui comme moi sont à la rammasse :
php in the world

Vers les rouge les pas gentils envers PHP, en vert les trés trés gentils 😉

D’autres stats sur : nexen

Comments (1)

fonctions pour Les ENUM PHP/MYSQL

Pour ceux qui n’avaient pas remarqué (cf ici) , J’adore le type ENUM.

Alors voila trois fonctions toutes connes.

majEnum : Vas mettre jour le champ ENUM dans MySql.
funcEnumList : Vous donne un tableau qui liste les ENUM d’un champ Mysql.
funcMakeFormList : vous génere le select pour les formulaires HTML.

Mise à jour d’un champ de type ENUM à Partir d’un Tableaux
– $strTable : Table contenant l’enum à mettre à jour
– $strEnumField : Nom du champ de type ENUM a mettre à jour
– $arrEnum : Tableaux des ENUM
– $strDefault : L’ENUM par default (Optionel)

function majEnum($strTable, $strEnumField, $arrEnum, $strDefault = 'DEFAULT') {
if ( !in_array($strDefault,$arrEnum) ) {
$strDefault = $arrEnum[0];
}
foreach ( $arrEnum as $strEnum) {
if (!$strToEnum) {
$strToEnum = '\'' . $strEnum . '\'';
} else {
$strToEnum.= ', \'' . $strEnum . '\'';
}
}
$reqUpdate = 'ALTER TABLE `' . $strTable . '` ';
$reqUpdate.= 'CHANGE `' . $strEnumField . '` `' . $strEnumField . '` ';
$reqUpdate.= 'ENUM( ' . $strToEnum . ' ) NOT NULL DEFAULT \'' . $strDefault . '\';';
mysql_query($reqUpdate);
}

Fontion qui cr ée un tableaux des enums
– $strTable : Requette
– $strField : table comtenant le champ enum (table.field)

function funcEnumList( $strTable, $strEnumField ) {
$reqListEnum = 'SHOW COLUMNS FROM `' . $strTable . '` LIKE \'' . $strEnumField . '\' ';
$recListEnum = mysql_query($reqListEnum);
$arrRow = mysql_fetch_assoc($recListEnum);
//memoire libere toi
mysql_free_result($recListEnum);
$arrEnum = explode(
'\',\'',
preg_replace(
'/.*\(\'(.*)\'\)/',
'\\1',
$arrRow['Type']
)
);
return $arrEnum;
}

Fontion qui cr ée la liste dans un formulaire a partir d’un tableau
– $strName : Nom de la liste
– $arrValue : contenu de la liste
– $strId : id de la liste
– $strOpt : option html de la liste
– $strSelected : option selectionn é par defaut

function funcMakeFormList( $strName, $arrValue, $strSelected = '', $strId = '', $strOpt = '' ) {
if ( $strId == '' ) {
$strId = $strName;
}
if ( $strOpt == '' ) {
$strOpt = ' '.$strOpt;
}
$strHtml = '';
return $strHtml;
}

Commentaires

Bug search, Please Help Me !!

Au boulot j’ai eté confronté à un bug qui m’a bien soullé.
En fait ce bug etait dût au fait que le cookie de session bien connu qu’est PHPSESSID prennait la valeur ‘deleted’.

Je me retrouvais avec des $_COOKIE[‘PHPSESSID’] == ‘deleted’ !

Je n’arrive trop pas à reproduire ce cas de figure.

Vous avourez que c’est bizare en toute logique ce cookie disparait en fin de session ou au pire prend une valeur null.

Est-ce un spyware, un antivirus, un script-blocker un client web qui engendre cela ???

En gros j’en sais rien mais peut-etre que vous vous savez !
Moi j’ai trouvé que ce post qui en parle vaguement : « semble que dans firefox quand le serveur supprimait le cookie il n’était pas supprimé mais prenait la valeur « deleted » ce qui provoquait (…)  »

J’aime pas quand je trouve pas les causes de mes problèmes !!!!

Alors une idée ?

Commentaires

JMeter -> Testez votre serveur WEB et Script PHP

JMeter est un outil développé par Apache qui permet de mesurer les performances de Sites Internet, Serveurs FTP ,Bases de données,Scripts Perl et j’en passe …

Il est vachement pratique pour tester les montés en charge de votre serveur.
D’ailleurs laissez moi rire du résultat qu’a obtenu le blogDesBois sur Free : 7 visites simultanées pas plus 😉 ( no comment ).

Enfin si j’en parle aujourd’hui c’est qu’il permet aussi d’effectuer des test sur vos script php.
Bien sur il gére les sessions, cookies et autres paramétre nécéssaire pour tester vos page.
Il permet de boucler sur un script pour étudier son comportement et verifier si la réponsse que vous attendez est bien la bonne. Ou tout simplement de voir si la réponsse contient warning , parse error …
Pratique pour voir à partir de combien de visiteurs en même temps la ram de votre serveur plante quand par exemple vous générez des pdfs ou des graphiques.

Screen en cherchant « Promenons nous dans les bois » sur la Home de BDB pour 10 visites simultanés :

ResultVerif

Le soft est assez intuitif , marche sur Linux ou Win et est en Français.
Perso je l’ai testé et on arrive facilement à nos fins. Mais pour les fans des tutos j’en ai trouvé un sur phpBuilder (english).

Sreen Exemple organisation de test :
menuJm

Sreen d’une réponse headers :

3.png

Vut les résultats obtenus par le serveur BDB chez Free je vous fait grace des graphiques de performance.
Just for fun (simplement aprés 10 visites simultanées):

dead

Comments (1)

PHP Designer 2006

Tite Pub pour ce soft gratuit sous Fenêtre ( pardon mais je l’avais jamais faite).

Il s’agit d’un editeur PHP qui va bien.
A l’image d’ECLIPSE il fait le diagramme de classe de vos script. Ainsi une petite fenêtre a droite vous permet de retrouver une fonction facilement.
Il gére le FTP, sa « code completion » est trés bonne, il comprend la doc php ainsi que les librairies PHP.
Bref pour 0 € ça le fait !

Le ti screen :
phpD

Le défaut :

Il n’a pas l’option que j’aime sous Kate ( LINUX) : celle qui permet de réduire la boucle dans laquelle est situé notre Curseur.
Vous savez cette option que DreamWeaver 8 a implémenté à moitié (on doit selectionner nous même la partie de code à reduire).
Bien domage car cette fonctionalité est vraiment utile quand on se retrouve dans des boucles imbriquées assez longues.

Mais bon testez quand même PHP Designer car dans la catégorie gratos c’est mon préféré sous windows. ( for linux it’s blueFish or kate depend on the project )

Comments (4)

Annuaire de développeurs PHP

Une trés bonne initiative que je me dois de saluer et de propager !!
Pour tous les developpeurs PHP qui passent par ici inscrivez-vous sur :

 http://www.developpeur-php.eu

Et merci à Yéca pour cette idée simple mais bonne 😉

Comments (1)

Procédure PHP pour la vérification des CSV

* fonction proVerifCsv
* Auteurs : GamePlayer
* Version : 01/06/2006
* fonction qui vérifie l’intégrité d’un fichier csv par rapports des critères définis

* paramètres
* $strFile : fichier csv a valider
* $strSeparator : séparateur utilisé dans le fichier
* $intNbFields : nombre de champs sensés se trovuer dans le fichier
* $arrListFields = array() : liste des numéros des champs qui ne sont pas sensés être vides
* $strEnclosure = ‘ »‘ : Spécifie le caractère de délimitation des chaines
* utilisé dans le csv.

* Retour : liste des erreurs contenues dans le fichier, séparées par des ‘;’. Pour chaque erreur, on trouve le numéro de la ligne suivi du code associé l’érreur
* (séparés par ‘:’). Si aucune erreur bloquante n’est constatée, la valeur retournée est ‘OK’, suivi par les avertissements éventuels.
* Codes possibles :
* Erreurs bloquantes :
* x:NBFIELDS : Le nombre de champs concernant la ligne x n’est pas egal $intNbFields
* x:EMPTYFIELD : La ligne x contient des champs vides interdits par $arrListFields
* 0:NOTFILE : $strFile n’est pas un fichier
* Avertissements non bloquants :
* x:EMPTYLINE : La ligne x est vide

function proVerifCsv($strFile, $strSeparator, $intNbFields, $arrListFields = array(), $strEnclosure = '"') {
$booRemoveQuotes = true;
$strResult = '';
$strWarnings = '';
if (is_file($strFile)) {
$ptrFile = fopen($strFile,'r');
$intCptLine = 0;
while (($arrLine = fgetcsv($ptrFile, 1000, $strSeparator,$strEnclosure)) !== FALSE) {
$intCptLine ++;
if (implode($arrLine)) {
if (count($arrLine) != $intNbFields) {
$strResult .= $intCptLine.':NBFIELDS;';
} else if (!empty($arrListFields)) {
foreach($arrListFields as $intTestField) {
if (is_int($intTestField)) {
if (empty($arrLine[$intTestField])) {
$strResult .= $intCptLine.':EMPTYFIELD;';
}
}
}
}
} else {
$strWarnings .= ';'.$intCptLine.':EMPTYLINE';
}
}
fclose($ptrFile);
} else {
$strResult = '0:NOTFILE;';
}
if (empty($strResult)) {
$strResult = 'OK'.$strWarnings;
} else {
$strResult = substr($strResult,0, strlen($strResult)-1);
}
return $strResult;
}

Commentaires

« Page précédente · Page suivante »

Bad Behavior has blocked 0 access attempts in the last 7 days.