PROJET AUTOBLOG


Tiger-222

Archivé

Site original : Tiger-222

⇐ retour index

Comment gérer les checkbox multiple non envoyées en POST ?

vendredi 21 février 2014 à 12:05
C'est un cas qui revient assez souvent sur la toile : dans votre formulaire HTML, les cases à cocher ne sont accessibles avec PHP — dans le tableau $_POST — que si elles sont cochées. Il existe des astuces comme ajouté un champ caché, mais dans le cas suivant, ça ne fonctionnera pas (ou la mise en place serait trop fastidieuse).


Le formulaire


Imaginons une todolist toute simple en HTML, avec quelques contrôles en JS et le stockage en PHP.
<form action="." method="post">
	<table summary="Liste des choses à faire">
<tr>
<th>Tâche</th>
<th>Priorité</th>
<th>Urgent ?</th>
</tr>
<tr>
<td><input type="text" name="tache[]"></td>
<td><input type="number" name="priorite[]" step="1" min="1" max="5"></td>
<td><input type="checkbox" name="urgent[]"></td>
</tr>
<!-- (...) plusieurs autres lignes telles que la précédente -->
</table>
<input type="submit" value="Mettre à jour !">
</form>

Dans ce cas là, si j'ajoute 3 choses à faire non urgentes, le tableau $_POST sera rempli tel que :
array(2) {
["tache"]=> array(3) {
[0]=>
string(17) "Faire les courses"
[1]=>
string(28) "Corriger bug #2 Shaarlimages"
[2]=>
string(1) "S'abonner à MISC"
}
["priorite"]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "4"
[2]=>
string(1) "2"
}
}

Maintenant, je coche urgent pour la tâche n° 2, soit « Corriger bug #2 Shaarlimages ». Voyons ce que ça donne :
array(3) {
["urgent"]=> array(1) {
[0]=>
string(2) "on"
}
["tache"]=>
array(3) {
[0]=>
string(17) "Faire les courses"
[1]=>
string(28) "Corriger bug #2 Shaarlimages"
[2]=>
string(1) "S'abonner à MISC"
}
["priorite"]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "4"
[2]=>
string(1) "2"
}
}
DOH ! La tâche n° 1 se retrouve urgente, c'est n'importe quoi !


La solution


Lorsque l'on utilise name="tache[]" à la place de name="tache", le tableau $_POST est peuplé d'un tableau contenant les différentes valeurs de tous les champs ayant comme name tache. La premère occurrence sera en tête du tableau. Il y a donc un indice, un curseur, ou appelez ça comme vous voudrez, qui est incrémenté.
Utilisons ce système à notre avantage alors !

Lorsque l'utilisateur (dé)chochera une case à cocher, on lui affectera la valeur de sont index dans le tableau. Facile :
<form action="." method="post">
	<table summary="Liste des choses à faire">
<tr>
<th>Tâche</th>
<th>Priorité</th>
<th>Urgent ?</th>
</tr>
<tr>
<td><input type="text" name="tache[]"></td>
<td><input type="number" name="priorite[]" step="1" min="1" max="5"></td>
<td>
<input type="checkbox" name="urgent[]"
onChange="this.value = this.parentNode.parentNode.rowIndex;">
</td>
</tr>
<!-- (...) plusieurs autres lignes telles que la précédente -->
</table>
<input type="submit" value="Mettre à jour !">
</form>
La fonction rowIndex retourne l'indice de la ligne dans le tableau.

Dorénavant, voici le contenu du tableau $_POST avec la tâche n° 2 urgente :
array(3) {
["urgent"]=> array(1) {
[0]=>
string(1) "1"
}
["tache"]=>
array(3) {
[0]=>
string(17) "Faire les courses"
[1]=>
string(28) "Corriger bug #2 Shaarlimages"
[2]=>
string(1) "S'abonner à MISC"
}
["priorite"]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "4"
[2]=>
string(1) "2"
}
}
L'ordre du tableau urgent ne compte plus, il contient seulement les indices des caces cochées.

Et du côté de PHP, pour savoir si une tâche est urgente ou non :
for ( $i = 0, $len = count($_POST['tache']); $i < $len; ++$i ) {
$infos[] = array(
'tache' => $_POST['tache'][$i],
'priorite' => min(max(1, $_POST['priorite'][$i]+0), 5),
'urgent' => isset($_POST['urgent']) ? in_array($i, $_POST['urgent']) : false,
);
}

Livre : Forteresse digitale

mercredi 22 janvier 2014 à 21:44
Dans le cadre du défi de lecture 2014, voici le bouquin de la semaine 3, gentiment offert par Adem à l'occasion du Papa Nawel surprise des shaarlieurs :
livre_Dan-Brown---Forteresse-digitale.jpg


À la National Security Agency, l’incroyable se produit. TRANSLTR, le puissant ordinateur de décryptage, ne parvient pas à déchiffrer un nouveau code. Appelée à la rescousse, Susan Fletcher, la belle et brillante cryptanalyste, comprend qu’une terrible menace pèse sur tous les échelons du pouvoir. La NSA est prise en otage par l’inventeur d’un cryptage inviolable qui, s’il était mis sur le marché, pulvériserait tout le système de renseignement américain ! Emportée dans un tourbillon de secrets et de faux-semblants, Susan se bat pour protéger son pays et sortir l’agence de ce piège.
Bientôt trahie par tous, c’est sa propre vie qu’elle devra défendre ainsi que celle de l’homme qu’elle aime.


Bien que Dan Brown l'ai écrit en 1998, il avait de la suite dans les idées, ou de bons informateurs... J'ai l'impression de lire un rapport romancé de Jacob Appelbaum suite aux révélations d'Edward Snowden ! Vraiment passionnant, l'histoire ne connait aucun "mou", les personnages sont attachants et le dernier tiers se lit à vitesse grand V tellement c'est prenant.
Les sujets abordés sont, vous l'aurez compris, la surveillance de masse, la mort de la vie privée pour justifier la protection d'un pays et le sabotage d'algorithmes de chiffrement... Bienvenue en 2014 ! Qui plus est, ça se laisse très bien lire, même pour les non initié(e)s.
Livre suivant : Le Horla, de Guy de Maupassant.

Pot de miel en vue sur le port 22

lundi 20 janvier 2014 à 03:03
Un pot de miel (honeypot en anglais) est un moyen efficace de piéger les attaquants d'un système en leur faisant croire qu'ils ont réussi. Il est alors possible de voir et comprendre comment ils ont fait. Cela s'appelle de la défense active.

drunk-bee.jpg
« Argh... meehh ! Tu sais où tu peux t'le mettre ton dard ‽ »


Faisons un test avec SSH qui, par défaut, utilise le port 22. Kippo est le pot de miel parfait pour ça !


Installation


Avant toute chose, redirigez le port 22 de votre routeur pour qu'il pointe vers le port 2222 (par défaut) de votre machine, ensuite :
$ sudo aptitude install python-twisted
$ wget https://kippo.googlecode.com/files/kippo-0.8.tar.gz
$ tar xzf kippo-0.8.tar.gz
$ cd kippo-0.8


Paramétrage


Dans le fichier kippo.cfg, vous pouvez ajuster quelques options pour faire plus vrai, comme hostname et banner_file. Le premier sert à définir le nom de la machine et le second à afficher la bannière de connexion, généralement le contenu de /etc/motd. Exemple :

             `` Le serveur à la s@uce... ,,
_@-@_ ____ _ _____ _ ____ .----. @ @
_(-._.-)_ | __ ) ___ | |__ __|_ _(_)/ ___| / .-"-.`. \v/
.-( `---' )-. | _ \ / _ \| '_ \ / _ \| | | | | _ | | '\ \ \_/ )
__\ \\\___/// /__ | |_) | (_) | |_) | (_) | | | | |_| | ,-\ `-.' /.' /
'-._.'/M\ /M\`._,-` |____/ \___/|_.__/ \___/|_| |_|\____| '---`----'----'



Dans le fichier data/userdb.txt, vous pouvez ajouter d'autres couples utilisateur:mot de passe.


Exécution et éclate


Pour démarrer le pot de miel, il suffit de faire :
$ ./start.sh

Et pour vous fendre la gueule, vous pouvez revivre les différentes attaques :
$ python utils/playlog.py log/tty/aaaammdd-hhmmss-XXXX.log


Sources : Running an SSH honeypot with Debian and Kippo et Installing Kippo SSH Honeypot on Ubuntu

Installer BitTorrent Sync

lundi 20 janvier 2014 à 00:56
BitTorrent Sync est un outil de synchronisation sécurisée de fichiers, du pair à pair chiffré en AES 256, disponible sur les plateformes Windows, Mac OSX et GNU/Linux. Un concurrent non libre et non open-source à Droppox, Google Drive et consorts.

Installation


Récupérer la dernière version depuis la page des téléchargements, décompresser l'archive obtenue, puis placer l'exécutable btsync dans /usr/local/bin/.


Configuration


Admettons qu'un volume TrueCrypt soit monté dans /media/trucrypt1 et que nous voulions stocker les informations de configuration dans celui-ci, voici les commandes à effectuer :
$ mkdir /media/trucrypt1/.sync
$ btsync --dump-sample-config > /media/trucrypt1/.sync/sync.conf

Éditer le fichier nouvellement créer et y ajouter :
{
"device_name": "Tiger-222",
"listening_port" : 2048, // 0 - port aléatoire
"storage_path" : "/media/truecrypt1/.sync",
"check_for_updates" : false,
"use_upnp" : false,
"download_limit" : 0,
"upload_limit" : 0,
"webui" : {
"listen" : "0.0.0.0:8888",
"login" : "identifiant",
"password" : "mot de passe"
}
}
Ne pas oublier de rediriger le port, 2048 dans cet exemple. Le nom des options est assez compréhensible, mais si vous bloquez, n'hésitez pas à demander.


Exécution


Il suffira d'appeler btsync avec le fichier de configuration désiré :
$ btsync --config /media/trucrypt1/.sync/sync.conf
# BitTorrent Sync forked to background. pid = xxxx

L'interface web est désormais accessible à http://127.0.0.1:8888, vous pouvez modifier la langue et ajouter des dossiers de partage (création, ajout avec clef secrète, etc.).

btsync.png


.SyncIgnore


Si certains fichiers d'un dossier partagé ne doivent pas l'être, créer le fichier .SyncIgnore dans ce dossier et ajouter un motif par ligne :
*.bak
~*
dossier/confidentiel.odt

Lien vers la documentation officielle.

Live : Dans la peau d'un informaticien expert judiciaire - L’âge d’or est devant nous

dimanche 12 janvier 2014 à 21:30
Dans le cadre du défi de lecture 2014, voici le bouquin de la semaine 2 :
livre_zythom_T1


Ce livre est un recueil d'articles croustillants publiés par le génialissime Zythom, un informaticien qui endosse la parfois difficile activité d'expert judiciaire. Comme nous pouvons nous en douter, il s'agit en grande partie de faits divers en relation avec l'expertise judiciaire dans le domaine de l'informatique... et c'est passionnant ! Ça permet de découvrir un univers assez opaque où il faut gérer plusieurs parties (comprenez personnes ou représentants), s'intéresser un minimum au droit, rester pédagogue tout en étant à la pointe dans son domaine. Bref, ça n'est pas de tout repos, mais c'est raconté avec légèreté, sérieux et humour.
Le plus dur dans l'histoire, c'est lorsqu'il raconte ses expertises liées à la pédopornographie : je lui tire mon chapeau, car devoir visionner 3 000 photos et vidéos dans le weekend, ça doit être éreintant et assez désespérant. Mais, comme Zythom le dit si bien, il sauve des vies en contrepartie.

Aller, voici un petit extrait complètement décalé :
Le mot "coaltar" signifie "goudron de houille". Cette substance est utilisée pour imprégner les bois et en thérapeutique comme désinfectant et antiseptique.

Je n'avais jamais vu ce mot écrit et n'en connaissais pas l'orthographe. C'est pourtant un mot souvent utilisé, par oral, dans l'expression "Etre dans le coaltar".

Si cet univers vous intéresse, Zythom a donné une conférence forte intéressante lors des JRES 2013 : https://www.youtube.com/watch?v=NEgy7ZO9s30.


Livre suivant : Forteresse Digitale, de Dan Brown (gentiment offert par Adem, mon Papa Nawel chéri).