Vous consultez les articles de la catégorie PHP
Juil
28

Recommandations de sécurité Ez publish et PHP

Failles xss

Avec Ez Publish

Utiliser la fonction wash() sur les variables dans les templates, surtout sur les variables pouvant être modifiées par l’utilisateur (paramètres d’url, champs de formulaire, etc)

En PHP

La stratégie de protection principale contre les injections HTML est la même que pour toutes les injections. Il est recommandé d’implémenter une fonction de filtrage en entrée et une fonction d’encodage en HTML en sortie.

L’encodage en sortie peut être effectué par deux fonctions en PHP :

htmlspecialchars() remplace tous les caractères qui ont une signification spéciale en HTML par leur entité HTML. Cette fonction va cibler les caractères suivants :

  • &, le « et commercial », qui commence les séquences HTML (telles que &) ;
  • ‘, les guillemets simples, utilisés dans les attributs ;
  • , les guillemets doubles, utilisés dans les attributs ;
  • < et >, les signes « inférieur à » et « supérieur à », qui délimitent une balise.

htmlentities() est une version plus complète de htmlspecialchars(), elle remplace dans une chaîne tous les caractères possibles par leur séquence HTML. Il est possible de spécifier le masque et l’encodage à utiliser

<a href="http://www.php.net/htmlentities" target="blank">htmlentities</a>($str, ENT_QUOTES, 'UTF-8');
Fév
29

Trier la colonne d’un tableau sans prendre en compte la casse et les accents

Par défaut, la fonction array_multisort n’est pas casse sensitive et ne gère pas les accents.

Du coup avec un tableau contenant « Allemagne », « Enfant », « Équipe », « Toto », on se retrouve avec l’ordre suivant : Allemagne, Enfant, Toto, Équipe

Pour contourner cela, nous allons faire appel à la fonction array_map afin de nettoyer les données à trier.

<?php
$functionSansAccent = function ($chaine) {
        if (version_compare(PHP_VERSION, '5.2.3', '>='))
            $str = htmlentities($chaine, ENT_NOQUOTES, "UTF-8", false);
        else
            $str = htmlentities($chaine, ENT_NOQUOTES, "UTF-8");
 
        // NB : On ne peut pas utiliser strtr qui fonctionne mal avec utf8.
        $str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str);
 
        return $str;
};
 
$data[] = array('mots' => 'Toto', 'nb' => 2);
$data[] = array('mots' => 'Allemagne', 'nb' => 2);
$data[] = array('mots' => 'Enfant', 'nb' => 1);
$data[] = array('mots' => 'Équipe', 'nb' => 6);
 
// On récupére les valeur de la première colonne
foreach ($data as $key => $row) {
    $colSort[]  = $row['mots'];
}
 
 //$colSort = array("Allemagne", "Enfant", "Équipe", "Toto");
//On supprime les accents
  $array_sans_accent = array_map($functionSansAccent , $colSort);
//On met en minuscule
  $array_lowercase = array_map('strtolower', $array_sans_accent);
// Ajoute $data en tant que dernier paramètre, pour trier par la clé commune
  array_multisort($array_lowercase, SORT_ASC, $data);
 
  print_r($data);
/*
Le rendu sera
 
Array
(
    [0] => Array
        (
            [mots] => Allemagne
            [nb] => 2
        )
 
    [1] => Array
        (
            [mots] => Enfant
            [nb] => 1
        )
 
    [2] => Array
        (
            [mots] => Équipe
            [nb] => 6
        )
 
    [3] => Array
        (
            [mots] => Toto
            [nb] => 2
        )
 
)
*/
Fév
16

Limite du nombre de paramètres GET

Author Appo    Category PHP     Tags , , , ,

Aujourd’hui j’ai rencontré un problème sur un site en production et seulement sur la production. Les symptômes ? Perte d’informations passées en paramètres GET. Après quelques recherches, nous avons repéré que $_GET ne contenait pas toutes les informations présentes dans l’url, il manquait les dernières (environ une dizaine de paramètres manquants).

La première hypothèse fut donc que l’URL était tronquée au delà d’un certain nombre de caractères. Sauf que le problème, c’est que d’une page à l’autre, la longueur de l’URL était différente mais surtout, que l’endroit où l’on perdait le premier paramètre n’était pas le même, donc ce ne pouvait pas être un tronquage de l’URL.

Lire la suite

Déc
7

Zend Framework : Aide de vue pour afficher les données issues d’un flux RSS

Voici une aide de vue Zend Framework qui vous permettra de lire les données provenant d’un flux RSS.
Pour cela nous allons utiliser la classe Zend_Feed_Reader

Voilà donc votre helper Rss.php situé dans votre dossier views/helpers/

<?php
 
class View_Helper_Rss extends Zend_View_Helper_Abstract
{
 
    public function rss($url)
    {
		$reader = new Zend_Feed_Reader();
    	        //Si vous avez besoin de passer par un proxy
		$config = array('proxy_host'=>'localhost','proxy_port'=>8080, 'proxy_user'=>'user', 'proxy_password'=>'password');
	    	   $adapter = new Zend_Http_Client_Adapter_Proxy();
		   $adapter->setConfig($config);
	    	   $reader->getHttpClient()->setAdapter($adapter);
 
 
    	try {
	    	$feed = $reader->import($url);
 
			$data = array(
			    'title'        => $feed->getTitle(),
			    'link'         => $feed->getLink(),
			    'dateModified' => $feed->getDateModified(),
			    'description'  => $feed->getDescription(),
			    'language'     => $feed->getLanguage(),
			    'entries'      => array(),
			);
 
			foreach ($feed as $entry) {
			    $edata = array(
			        'title'        => $entry->getTitle(),
			        'description'  => $entry->getDescription(),
			        'dateModified' => $entry->getDateModified(),
			        'authors'       => $entry->getAuthors(),
			        'link'         => $entry->getLink(),
			        'content'      => $entry->getContent()
			    );
			    $data['entries'][] = $edata;
			}
 
			return $data['entries'];
    	} catch (Zend_Exception $e) {
    		throw new Zend_Exception('Impossible de récupérer le flux RSS');
    	}
    }
 
}

Ensuite dans votre vue vous l’appelez avec en paramètre l’url du flux RSS à charger.

<?php 
      	//On va récupérer le flux rss du site du zéro par exemple	
            $urlRss = 'http://www.siteduzero.com/Templates/xml/tutoriels_fr.xml';
      		try {
      			$actusRss =  $this->rss($urlRss);	
      		} catch(Zend_Exception $e){
      			echo $e->getMessage();	
      		}
 
      		?>
<?php 
//Ensuite vous parcourez vos résultats avec un partialLoop par exemple
echo $this->partialLoop('front-commun/actuRss.phtml', $actusRss); ?>
Déc
6

Zend Framework : Aide d’action pour télécharger un fichier


Aujourd’hui nous allons voir comment réaliser une aide d’action (helper) en Zend Framework qui vous permettra le téléchargement direct d’un fichier (par défaut, un lien vers un fichier ouvrira le fichier dans le navigateur).

Pour cela nous allons créer un fichier Download.php dans votre dossier controllers/helpers

< ?php
class Controller_Helper_Download extends Zend_Controller_Action_Helper_Abstract 
{
	/**
	 * 
	 * Enter description here ...
	 */
	public function direct($dossier,$filename)
	{
		return $this->download($dossier,$filename);
	}
 
	  public function download($dossier,$filename)
    {
        $filepath = $dossier.DS.$filename;
    	$filesize = filesize($filepath);
        $filemd5 = md5_file($filepath);
 
        // Gestion du cache
        header('Pragma: public');
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
        header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
        // Informations sur le contenu à envoyer
       // header('Content-Tranfer-Encoding: ' . $type . "\n");
        header('Content-Length: ' . $filesize);
        header('Content-MD5: ' . base64_encode($filemd5));
        header('Content-Type: application/force-download; name="' . $filename . '"');
        header('Content-Disposition: attachement; filename="' . $filename . '"');
        // Informations sur la réponse HTTP elle-même
        header('Date: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
        header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 1) . ' GMT');
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
        readfile($filepath);
        exit;
    }
 
}

Lire la suite

Août
31

La fonction PHP extract() ou comment extraire John Butler.

Un petit article aujourd’hui pour parler d’une fonction que je n’avais jamais utilisée jusqu’à présent.

En fait, ça n’est pas tout à fait vrai, puisque j’ai développé une fonction qui faisait la même chose. Oui, je sais, j’aurais dû chercher dans l’excellente doc PHP avant. Lire la suite

Août
1

Symfony 2 : Erreur lors du premier lancement

Aujourd’hui j’ai voulu installer Symfony2 pour tester un peu. J’ai donc récupérer la version par défaut proposé sur le site, dézipper le bazar et je suis allé sur la première page

http://localhost/Symfony/web/app_dev.php

Et là, bam, première erreur PHP :

Fatal error: Class ‘Symfony\Component\DependencyInjection\Compiler\ResolveDefinitionTemplatesPass’ not found in …

Alors apparemment il s’agirait d’un bug dans la version .tgz qui ne contiendrait pas tous les fichiers, il suffit de prendre la version .zip à la place et tout rentre dans l’ordre, youpi !!

Edit : Pour ceux qui aurait l’erreur d’APC lors que vous allez sur le fichier web/config.php, il ne faut pas le prendre en compte car c’est un bug de Symfony. Tout fonctionne très bien sans APC

Sur ce, bon courage pour ceux qui commence à prendre en main ce framework!

Juil
28

Symfony 2 est sorti

Symfony2 est enfin sortie

Cela fait des mois que beaucoup de gens l’attendent, le voici enfin, Symfony 2 en version finale !

Il apporte avec lui son petit lot de nouveauté par rapport à Symfony 1.

  • Utilisation des namespaces et des particularités de PHP 5.3
  • Intégration de Doctrine 2
  • Arrivée des bundles
  • Utilisation de Twig comme moteur de template
  • Optimisation du code (suppression des methodes magiques PHP gourmandes en ressources)
  • Nouveau composant de gestion de formulaires
  • et certainement d’autres choses

Lire la suite

Juil
7

Convertir une page HTML en PDF avec ZendParadoxPDF

Paradox PDF, conversion de fichier HTML en PDF

ZendParadoxPDF est un plugin Zend qui permet de générer à la volée un PDF à partir d’une page HTML. C’est à la base un plugin EZ Publish que j’avais déjà eu l’occasion d’utiliser et dont j’avais été très satisfait.

Pour cela, il faut avoir Java d’installé sur son serveur car le script appel un fichier JAR qui s’occupe de la génération PDF.

Mise à part cette petite contrainte, ce générateur est plutôt efficace par rapport à d’autres dans la mesure où il supporte assez bien le CSS et notamment l’attribut « float », ce qui évite d’avoir à refaire une vue spécifique avec une mise en page avec des tableaux . Pour générer un PDF, il suffit d’avoir un fichier XHTML valide.

Lire la suite

Mar
21

CodeIgniter 2.0 : Etendre la classe Controller

En ce moment, au boulot, nous nous sommes fixé comme objectif de tester différents frameworks pour choisir celui que nous adopterons par la suite.

Je suis donc en train de faire quelques tests très basiques sur CodeIgniter 2.0, et je viens de rencontrer une petite difficulté en voulant étendre la classe Controller du Core. Cette petite note pourra peut-être aider quelques étourdis comme moi. Lire la suite

Edito

Bienvenue sur Mémorandom.

Mémorandom est le blog de 2 développeurs web, Appo et Nico.

Vous y trouverez des informations sur différents domaines touchant de près ou de loin au développement web

Tutoriels Yii Framework

Nos derniers articles

Blogs Dev

Liens

Étiquettes