Xevia AccueilBlogActualitésA propos

Espionner un contact Facebook grâce au ticker

Récemment, Facebook a mis à jour son interface et fait apparaître une zone appelée "ticker" (ou "télex" en français) en haut à droite de la page, qui ressemble à un fil d'actualité en plus concis. Une initiative très contestée ; une copie de Twitter selon certains, l'idée absurde d'un fil d'actualités dans un autre selon d'autres ... Je ne vais pas critiquer cette nouveauté mais plutôt l'"exploiter". On peut remarquer que le ticker affiche absolument tous les faits et gestes de nos amis : un nouveau statut, un commentaire sur un statut, un "j'aime" sur un statut, un "j'aime" sur une photo, et plus intéressant encore : un "j'aime" sur une publication d'un contact sur le mur d'un autre, même si on n'est pas ami avec ces deux derniers — autrement dit, le genre de mises à jour dont on se contrefout. Bref, le ticker affiche bien plus que le mur d'un contact ou le fil d'actualités principal. Pourquoi ne pas s'en servir pour surveiller une personne en particulier ?

L'idée est simple : on choisit un contact et on ne garde que les publications ayant un rapport avec ce contact dans le ticker. On supprime les autres quoi. C'est ce que fait ce script, hébergé sur Xevia :

Javascript
function refreshTicker() {
var divs = document.getElementsByTagName("div");
for(var i = 0; i < divs.length; i++) {
if(divs[i].className.indexOf("fbFeedTickerStory") != -1)
if(divs[i].innerHTML.indexOf(name) == -1)
divs[i].style.display = "none";
}
window.setTimeout("refreshTicker()", 100);
}
name = prompt("Name :","");
refreshTicker();

Il peut d'ailleurs être consulté ici : http://xevia.webege.com/ticker.js. Ne vous inquiétez pas, le script ne s'exécute pas quand le navigateur tente directement d'y accéder. C'est un code très simple, il recherche toutes les balises div de la classe "fbFeedTickerStory", qui sont les "posts" qui s'affichent dans le ticker, puis cache les publications ne contenant pas le contenu de name.

Comment intégrer ce code à Facebook ? Evidemment, on ne peut pas faire en sorte qu'il s'exécute à chaque ouverture de Facebook, sauf en utilisant un plug-in. Mais pour le charger de manière occasionnelle, on peut copier-coller ceci dans la barre d'adresse :

javascript:var elem=document.createElement("script");elem.src="http://xevia.webege.com/ticker.js";elem.type="text/javascript";document.getElementsByTagName("body")[0].appendChild(elem);

Puis il suffit d'appuyer sur Entrée. C'est un simple script qui charge le "script principal" à partir de Xevia. Une boîte de dialogue s'affiche alors pour demander le nom de la personne à "espionner".

Remarque très importante : Chrome supprime le "javascript:" quand on colle le texte dans la barre d'adresse, probablement pour des raisons de sécurité. Il faut donc taper "javascript:" au préalable.

23/09/2011

Les services publics ou comment provoquer un DoS en Javascript

C'est le genre d'informations qui démangent, on a envie de les publier mais du fait de leur trop grande importance, on doit les garder pour soi afin d'éviter le désordre ... et pour cause, il est ici question de mettre hors-service le site d'un service public dont je tairai le nom, un service de transports en commun (des bus pour être plus précis). On bloque le site et plus personne n'a accès aux horaires de bus. Bon, bien sûr, il faut vraiment être anormal pour s'amuser à s'attaquer à ce genre de sites mais si j'en fais un post aujourd'hui c'est à cause de la facilité déconcertante qu'on a à effectuer cette attaque.

Sur une page du site en question, on nous propose de nous déplacer sur la carte du réseau de transports. Pour cela on clique sur les "flèches directionnelles" ou on peut zoomer sur l'image. Dès qu'on clique sur l'un des boutons, la page est actualisée ... en y regardant de plus près, j'ai remarqué que la carte affichée était une image générée par un script s'exécutant côté serveur. Les paramètres que demande ce script sont les coordonnées du point en haut à gauche de l'image, la taille de l'image et des informations sur l'échelle (servant à traiter le zoom). Ces paramètres sont transmis au serveur par requête HTTP GET, autrement dit dans l'url de l'image. Il suffit de donner des valeurs énormes pour la hauteur et la largeur de l'image pour monopoliser la charge CPU du serveur — qui est sûrement aussi vieux que le site, donc ne doit pouvoir traiter pleinement qu'un seul thread à la fois. Comment automatiser tout ça ? Avec Javascript et AJAX. Et voilà, cinq minutes après, sept lignes et deux cent quarante sept octets plus tard, j'ai mon (tout) petit script qui si petit soit-il, va paralyser entièrement le site ... et faire le malheur des habitués — déjà malheureux de prendre cette "compagnie" de bus — qui vont devoir se rendre jusqu'à leur arrêt pour lire les horaires !

Remarque : d'un côté c'est pas plus mal, combien de personnes se sont faites avoir parce qu'ils ont mis à jour leurs horaires dans les arrêts mais pas sur le site ...

18/09/2011

Plus de scrollbars sous Chrome !

English version available

Google Chrome est surtout connu pour sa rapidité et son design ... mais niveau design, on peut reprocher l'abondance des scrollbars (barres de défilement) qui — c'est mon avis personnel — peuvent devenir envahissantes et casser totalement le design de la page que l'on est en train de visiter. Surtout quand le navigateur est en mode plein écran. Heureusement, il est possible de s'en débarrasser en appliquant des règles CSS spécifique à Chrome (ou WebKit plutôt). Voici la manoeuvre.

Ouvrir le fichier %LOCALAPPDATA%\Google\Chrome\User Data\Default\User Stylesheets\Custom.css

Insérer le code CSS ci-dessous

CSS
::-webkit-scrollbar {
height: 10px;
width: 10px;
background-color: #999999;
}
 
html > ::-webkit-scrollbar {
width: 0px;
}
 
::-webkit-scrollbar-thumb {
background: #999999;
}
 
::-webkit-scrollbar-track-piece {
background-color: #797979;
}

Cela devrait faire disparaître les barres de défilement verticales, et modifier le design des barres horizontales. Bien sûr vous pouvez changer le code CSS pour changer de couleurs ou de formes.

Scrollbarless BrowserVous avouerez que sans barres de défilement c'est quand même plus beau.

Custom Horizontal ScrollbarLa barre de défilement horizontale — qui apparaît rarement — est "customisée".

Il ne reste plus qu'à attendre que Google copie Apple et mette en place des scrollbars qui n'apparaissent que quand on scrolle et qui s'intègrent mieux à l'interface du navigateur ...

Edit (21/09/2011) : J'ai changé le code de manière à supprimer uniquement la barre de défilement verticale de la page. Les scrollbars devraient s'afficher correctement dans les autres conteneurs HTML, sauf dans les cadres. C'est particulièrement pratique quand on se sert de l'inspecteur d'éléments (Developer Tools) de Chrome. Leur design a aussi été modifié pour supprimer les arrondis.

09/09/2011

Lockerz epic fail

Vous ne connaissez pas Lockerz ? C'est une sorte de réseau social où l'on est récompensé pour toutes les actions qu'on y fait. Par exemple, regarder des vidéos des amis rapporte des points (les PTZ) que l'on peut ensuite utiliser pour obtenir une réduction sur certains articles. On peut aussi bénéficier de réductions dans des boutiques ou restaurants partenaires. Une page du site permet même de trouver les enseignes disponibles dans un lieu donné. Quand on voit l'URL de la page qui traite les requêtes — du style lockerz.com/dealz/lieu — on a l'irrésistible envie d'insérer des caractères inattendus du genre "<" ou ">" (pour tenter une attaque XSS, pourquoi pas) ... ce qui provoque une erreur HTTP 500 (Internal Server Error). Conclusion : le site ne sait pas gérer les caractères incongrus ... mais je doute que l'on puisse exploiter cette "faille". Chose amusante, le serveur est quand même programmé pour afficher un message d'erreur lorsqu'il est incapable de traiter la requête ! La preuve : en insérant le caractère "/", un astronaute nous signale que le serveur est surchargé — ce qui n'est pas le cas bien entendu. Sur la combinaison de l'astronaute on a écrit le code "404", qui est le code renvoyé par un serveur lorsqu'une ressource est inexistante. Et le titre de la page indique que le serveur a rencontré une erreur 500. Ce qui fait trois affirmations différentes sur le même bogue. Lockerz.com aurait-il des développeurs dignes de ce nom ?

Lockerz.com epic fail

http://lockerz.com/dealz

14/08/2011