Tous les articles dans PHP

8 Articles

[Oldies] Optimiser son code PHP

  1. If a method can be static, declare it static. Speed improvement is by a factor of 4.
  2. echo is faster than print.
  3. Use echo’s multiple parameters instead of string concatenation.
  4. Set the maxvalue for your for-loops before and not in the loop.
  5. Unset your variables to free memory, especially large arrays.
  6. Avoid magic like __get, __set, __autoload
  7. require_once() is expensive
  8. Use full paths in includes and requires, less time spent on resolving the OS paths.
  9. If you need to find out the time when the script started executing, $_SERVER[’REQUEST_TIME’] is preferred to time()

En finir (presque) avec les failles de sécurité de PHP

La sécurité des données est souvent considérée au départ  de la conception puis vite sous estimée par les développeurs et même par les clients – il faut y consacrer du temps…

Depuis PHP 5.2.0, l’assainissement et la validation des données sont nettement facilités avec l’introduction de filtrage des données.

L’utilisation de PHP sur le web a réellement été boostée avec les logiciels open source comme WordPress, Drupal et Magento ainsi que des applications Web comme Facebook. Les possibilités d’intrusion et d’insécurité pour les données augmentent d’autant plus que les applications où est employé PHP sont variées: sites web dynamiques, applications riche et métier, plates-formes de blogs, systèmes de gestion de contenu et commerce électronique – qui reste un sous-ensemble des autres sur le plan technique.
Il est donc indispensable d’assimiler les méthodes de propreté avec PHP, d’autant que ce nettoyage est grandement facilité avec les dernières versions de PHP. Aussi, avec quelques bonnes pratiques et un peu de qualité il est aisé de se protéger des attaques.

Pour rappel (ou pas), voici les menaces les plus connues (pour les solutions voir la doc et les liens plus bas) :

  • Cross-Site Scripting (XSS) :  la vulnérabilité la plus courante et pourtant la plus simple à prévenir. Le principe est de s’introduire dans un site à partir d’un autre pour déposer et exécuter un code malveillant.
    Un exemple très récent et marquant de cette technique est l’attaque de StalkDaily.com par le ver Mikeyy Twitter qui lançait du javascript via des interfaces Twitter infectées.
    Encore une fois les précautions à prendre avec le filtrage de données – celles passées par les URLs en l’occurrence – restent simples.
  • SQL Injection : Il s’agit d’injecter du code en insérant du script dans le programme initial et de le dévier. Par exemple en passant par un champ de recherche mal protégé, il est possible de casser la requête de recherche pour dévier l’objectif du programme et d’accéder à la base de données – et donc de lire ou de modifier le mot de passe administrateur etc. Là encore, les précautions sont aussi simples qu’efficaces.
  • Cross-Site Request Forgery (CSRF/XSRF) : va permettre à un utilisateur d’activer des actions pour lesquelles il n’a pas les droits. Par exemple, en déposant une image sur un forum qui contient en fait un script, lorsque l’administrateur, disposant de tous les droits va lire cette image, des codes malicieux vont s’exécuter – suppression etc.

Pour résumer, les sites sensibles au CSRF sont ceux qui acceptent les actions sur le simple fait de l’authentification à un instant donné de l’utilisateur et non sur une autorisation explicite de l’utilisateur pour une action donnée.

  • Il existe une variante de l’attaque précédente qui s’applique aux Cookies plutôt qu’aux sessions : le Cross Site Cooking. Les méthodes pour s’en prévenir sont les mêmes.
  • Données « inappropriées » : ce n’est pas vraiment une faille, mais c’est une vulnérabilité en ce sens que l’accumulation de mauvaises données peut faire planter un site – hébergement, base de données, affichage. Par exemple, sur MySpace (c’est dire…) il est possible d’altérer le profil utilisateur en modifiant l’affichage par l’insertion d’hacks CSS et HTML…

exploits_of_a_mom

La doc PHP nous dit qu’il existe deux sortes de filtre : la validation et le nettoyage.

La Validation sert à vérifier si une donnée passe certains critères. Par exemple, passer les critères de FILTER_VALIDATE_EMAIL va déterminer si une donnée est une adresse courriel valide, mais ne va pas modifier la données elle-même.

Le nettoyage va nettoyer les données, par exemple en retirant les caractères indésirables. Par exemple, passer une donnée à FILTER_SANITIZE_EMAIL va faire disparaître les caractères inappropriés dans une adresse courriel. D’un autre coté, la donnée n’est pas validée.

Des options sont éventuellement utilisées par la validation et le nettoyage, pour adapter leur comportement à des besoins spécifiques. Par exemple, avec l’option FILTER_FLAG_SCHEME_REQUIRED pour filter une URL, il faut indiquer le protocole utilisée (tel que http://).

Pour les sources et les différentes techniques c’est ici :

[+] – La documentation PHP – what else?…

[+] – Listing et applications des filtres

[+] – Tutoriaux et démonstrations

Architecture Youtube : point de secret

Adobe a publié un article sur l’architecture à concevoir pour des applications telles que Youtube ou MySpace. Au programme : serveur FMS, serveur d’encodage et plateforme PHP.
Il faudrait aussi s’intéresser (en bon geek) aux ressources matérielles; en bon chef de projet, aux coûts d’une telle structure et, pour le webdesigner, à l’ergonomie cliente qui se contente trop souvent du succès de l’application sans en exploiter toutes les possibilités (du player notamment). Post à suivre…

Architecture Youtube, myspace

Adobe met en avant ses produits avec le découpage suivant :

  • In Adobe Flex, display video thumbnails of videos
  • In Flex, select a video file from the user’s local hard drive
  • In Flex and PHP, upload the file to the web server
  • In PHP and with Carbon Coder, transcode the video
  • In PHP and Flex, wait until the file is encoded
  • In Flex and with Adobe Flash Media Server, update the video thumbnail list
  • In Flex and with Flash Media Server, enable the user to click on a thumbnail and play it in the video player

Remplacement de texte par de l’image

Voici plusieurs techniques pour insérer une typographie riche – i.e. remplacer du texte par une image, tout en respectant l’accessibilité et l’indexation par les moteurs de recherches : bluffant !

» /!\ problèmes d’accessbilité avec ces techniques et .
» La technique ultime.

» Une technique en php… prometteur mais… je ne suis pas arrivé à faire tourner….

» Surtout pour les titres, en css brut.

» Solution simple et compatible.

» pas mal du tout.

» En javascript.
Il s’agit ici plus d’un detect pour savoir si le navigateur autorise l’affichage d’image.

Lignes alternatives : l’opérateur modulo

Voici une technique simple qui va permettre, par exemple, de colorer une ligne sur deux.

for($i=0;$i<10;$i++) {
if($i % 2) {

//macouleur=blanc
}else{
//macouleur=gris
}

Des effets CSS

» Opacity et transparence.

» Apparition de l’image en fade.

» Un faux loader… par exemple pour le chargement d’une image.

» Rendre les liens ‘visited’ plus sexy.

» Des info-bulles

» Effet sur un logo.

» De l’ombrage, aussi chez sixApart

» un rollover sur une partie d’une image.

» Généré des dégradés php et css.

» Un rating… très en vogue.

Génération PDF

Lorsque l’on cherche sur le web un moyen de générer une fichier au format PDF, on tombe sur PDFLib, fiable mais payant.
Reste deux autres alternatives, la librairie open source fpdf, plutôt bien faite surtout quand on y ajoute quelques plugins, ou tout se palucher à la main, ce que propose Zend.

ouvrir