Affichage des articles dont le libellé est Programmation. Afficher tous les articles
Affichage des articles dont le libellé est Programmation. Afficher tous les articles

Referrer spoofing avec CURL

Plus tôt aujourd'hui, j'aidais un de mes collègues à exploiter une fonctionnalité d'un site web d'un tiers parti qui nécessitait d'être appellé par le site lui-même pour que la requête soit considérée valide (juste pour préciser, rien n'était illégal dans notre démarche).

Ce que nous avons fait est un peu l'équivalent de se rendre sur une page, de remplir les champs d'un formulaire, de soumettre le tout et de récupérer le résultat pour nos besoins. La différence, c'est que nous avons fait le tout par programmation. C'est donc une méthode peu robuste et durable de faire les choses mais qui nous a servi à atteindre nos objectifs sans trop se casser la tête.

Nous avons créé un script PHP qui a lancé un appel CURL au formulaire distant. Cependant, il ne répondait pas correctement et nous avions de la difficulté à figurer pourquoi. Alors nous avons émis l'hypothèse que le formulaire devait vérifier la provenance de la requête en utilisant la variable serveur HTTP_REFERER car nous avions remarqué que CURL n'envoyait pas de valeur pour ce header.

Nous avons eu l'idée d'avoir recours à une technique nommée referrer spoofing. Ceci consiste à modifier l'entête HTTP qui indique le référant (d'où la requête provient) pour lui substituer un autre URL.

Avec CURL, il suffit d'ajouter la ligne suivante qui initialisera le header avec la valeur qu'on lui passe :
curl_setopt($handler, CURLOPT_REFERER, "http://code18.blogspot.com/");
Comme par magie, ça s'est mis à fonctionner.

Si cette simple ligne de code nous a permis d'obtenir le résultat escompté, on devra en conclure que dans notre programmation, la vérification du référant peut parfois être pratique, mais il ne faut pas s'y fier comme mesure de sécurité puisque ça peut être aisément déguisé.
Continue Reading...

Dreamweaver mange mes variables !

Ces dernières années, j'ai utilisé Dreamweaver que pour les quelques rares fois où j'ai eu besoin de l'éditeur WYSIWYG (mode Design). Récemment, j'ai ouvert une page PHP dans Dreamweaver et j'ai vraiment regretté...

Dans un cas très particulier, Dreamweaver modifie les variables écrites en "camel case" pour les transformer entièrement en minuscule. Et comme c'était une page PHP et que dans ce langage, les variables sont sensibles à la casse, ça a fait un beau gâchis dans de nombreuses pages de mon projet. Ce qui veut dire que $maVariable n'équivaut pas à $mavariable.

Le pire dans tout ça, c'est qu'à l'ouverture d'un fichier, Dreamweaver applique les modifications et ne montre pas que le fichier a été modifié ! Il transforme certaines variables à notre insu en suivant les directives inscrites dans les préférences.

Le contexte est particulier. Lorsque du code dynamique est placé à l'intérieur d'une balise HTML, par exemple pour ajouter un attribut de style, que ce code est écrit sur une seule ligne, sans qu'il y ait d'espace entre la fermeture du code dynamique et l'attribut HTML, il transforme ce qui se trouve entre en minuscule.

Par exemple, le code suivant :
<div
<?php if($iCamelCaseVariable >= $myObject->method()) { ?>
style="display:none;"
<?php } ?>
>
$iCamelCaseVariable et $myObject seront transformés si DW trouve ceci :
method()) { ?>style="display:none;"<?php } ?>

Et ne le seront pas lorsqu'il détecte l'espace avant l'attribut style :
method()) { ?> style="display:none;"<?php } ?>

Ceci se produit en raison d'une configuration de l'application qui force l'édition du code à être uniforme, mais Dreamweaver ne semble pas considérer ou détecter correctement qu'il y a du code PHP et applique la règle à l'ensemble du code, pas seulement aux marqueurs HTML.

Heureusement, j'ai remarqué que l'option était inactive par défaut sous CS4. Sinon, on peut la désactiver par ici :
  • Menu Edit / Preferences / Code Format
  • Décocher l'option Override case of : Attributes
  • Dans le cas contraire, Dreamweaver appliquera la règle spécifiée sous "Default attribute case"


J'ai observé ce comportement dans Dreamweaver, depuis au moins la version 8 jusqu'à la plus récente CS4.
Continue Reading...

Installer un cronjob

Ce matin, j'ai décidé de présenter le cron de Linux. Qu'est-ce que le cron ? D'abord, le nom vient du diminutif du mot "chronograph", qui est un programme système qui permet d'exécuter des tâches planifiées dans le temps (job scheduler).

Cron est aussi un daemon, c'est-à dire un processus qui roule en arrière-plan en attendant qu'il soit sollicité. Lorsque le processus est en fonction, il lira les instructions dans un fichier de configuration nommé crontab qui définit à quel moment précis il doit exécuter les tâches. Chaque utilisateur peut avoir son propre crontab mais dans le cadre de ma démonstration, je vais procéder en tant que l'utilisateur root.

Comme tâche, on pourrait faire rouler n'importe quel type de script (Bash, Perl, PHP, etc). Ici, j'en utiliserai un écrit en PHP qui imprimera dans un fichier texte un timestamp par ligne à chaque exécution. J'indiquerai au cron de rouler le script à chaque minute et nous pourrons suivre la progression en temps réel.

1. Exemple de script PHP
$file = "/code18/test/log.txt";

$fh = fopen($file, 'a') or die("Oups");
fwrite($fh, date("Y-m-d H:i",time()) . "\n");
fclose($fh);
À partir de la racine, je placerai ce script dans /code18/test/cron.php.

2. Comprendre la syntaxe

Définir un cron se fait par une ligne :
  • Les 5 premiers champs représentent la fréquence
  • Le 6ème représente la ligne de commande (chemin de l'interpréteur)
  • Le 7ème est pour le chemin du script
Pour déterminer la fréquence, on se référera dans l'ordre aux valeurs possibles :
  1. Minute de l'heure : 0 à 59
  2. Heure du jour : 0 à 23
  3. Jour du mois : 1 à 31
  4. Mois de l'année : 1 à 12, ou textuel en anglais (voir plus bas)
  5. Jour de la semaine : 0 à 6, dimanche étant zéro
Dans ces 5 champs, on peut remplacer la fréquence par l'astérisque * pour indiquer "tous". On peut aussi utiliser des combinaisons comme la virgule pour séparer plusieurs valeurs (sans espace) et choisir une plage avec le tiret.

Par exemple, si on veut rouler le script :
  • le 15 du mois : 15
  • le 15 et le 30 du mois : 15,30
  • du 15 au 20 du mois : 15-20
  • tous les jours du mois : *
Le bloc des 5 champs de fréquences peut aussi être remplacé par un des mots clés suivants : @yearly, @annually, @monthly, @weekly, @daily, @hourly, @midnight, @reboot.

Ce dernier est pratique pour exécuter quelque chose au moment du démarage de l'ordinateur. Dans mon cas, pour exécuter mon script à chaque minute, la fréquence sera : * * * * *

Pour trouver le chemin de l'interpréteur PHP, on peut utiliser la commande which qui retourne le chemin absolu à utiliser :

which php

Sur ma machine :
/usr/bin/php

Finalment, mon script se trouvera dans /code18/test/cron.php

3. Modifier le fichier crontab

À partir d'un terminal, lancer la commande :

crontab -l

Ceci listera les tâches planifiées pour l'utilisateur courant. Pour en ajouter une, il faudra modifier le fichier de configuration :

crontab -e

Ceci ouvrira le fichier de configuration avec l'éditeur par défaut. Si comme moi vous n'aimez pas vi (lancé par défaut sous Fedora), vous pouvez vous référer à mon entrée de jeudi pour savoir comment le substituer par nano.

Dans le haut de la fenêtre, remarquez le nom du fichier :

File: /tmp/crontab.XXXXXXXXXXX

Ne vous fiez pas au fait qu'il soit dans le répertoire temporaire. Comme vous modifiez le fichier par crontab, il crée une nouvelle tâche et la déplacera automatiquement au bon endroit au moment de la sauvegarde.

Ajoutez la ligne suivante (adaptez la à vos besoins) :

* * * * * /usr/bin/php /code18/test/cron.php

Enregistrez le fichier et sortez de nano. Créé en tant que root, les instructions sont placées dans le fichier /var/spool/cron/root.

4. Est-ce que ça marche ?

Exécutez à nouveau crontab -l pour vous assurer que la tâche a bien été ajoutée. Vous devriez voir la ligne s'afficher. Maintenant, je veux m'assurer que le script fonctionne bien. Je vais l'ouvrir avec less

less /code18/test/log.txt

Une fois less lancé, je peux suivre la progression de ce qui est ajouté à la fin du fichier en faisant la combinaison des touches SHIFT+F. À chaque minute, un enregistrement sera ajouté à la fin et je le verrai apparaître (vous verrez un message "Waiting for data"). CTRL+Z pour sortir de ce mode.

5. Supprimer les tâches

Vous pouvez retirer la ligne du fichier ou simplement appeler la commande crontab -r pour tout effacer les ordres.
Continue Reading...

lala moulati ana9a maghribia

seo

 

Blogroll

Site Info

Text

telechargementz Copyright © 2009 WoodMag is Designed by Ipietoon for Free Blogger Template