Mise à jour [16/02/2011] - TF1 a modifié son lecteur Flash et remplacé la méthode incriminée par une version propre, nommée "hasRedirect". La version du player analysée dans cet article était la 4.0.80, celle actuellement en place sur les sites de WAT et TF1 est désormais la 4.0.81 .
Article original du 13/02/2011:
Je me suis (encore) penché sur la sécurité des applications Flash, notamment à cause de la médiatisation du streaming et du tintouin que cela a causé vis-à-vis de l'Hadopi, en espérant trouver quelque-chose du côté de TF1 et M6 (ces deux sociétés ont misé il y a quelques années sur le streaming, avec leur service de "catch-up" TV).
Et j'ai trouvé un truc bien cocasse.
Le player flash de WAT + une méthode bizarre
La plateforme WAT est une plateforme de diffusion de vidéo, propriété de TF1 qui s'en sert aussi de socle pour la diffusion des vidéos de "catch-up", via le protocole RTMPE (pur streaming). Il n'y a donc plus de problème de fuites de vidéos au format FLV, comme j'ai pu l'aborder dans un pécédent post.
Cette plateforme s'articule autour d'un lecteur vidéo développé maison, et intégré notamment dans les sites de WAT (http://www.wat.fr) et de TF1 vidéos (http://videos.tf1.fr). C'est en plongeant les mains dans le code de ce lecteur maison que j'ai pu identifier une routine peu commune:
override public function get hasPiegeACouillon() : Boolean
*
if (isEmbedMode)
{
return PlayerDataManager.getInstance().flashVars.hasRedirect == "1";
*
return super.hasPiegeACouillon;
}
Et là je suis resté coincé entre le rire et l'étouffement. Je me suis ensuite demandé à quoi servait cette méthode particulière, car des fois on trouve ce genre de choses dans des objets Flash sans qu'elles soient réellement fonctionnelles.
Investigation
J'ai donc fouillé dans le code désassemblé, et j'ai pu identifier la référence à cette méthode:
case "BAR_CLICKED":
*
if (super.playerState.currentErrorType == PlayerState.ERROR_TYPE_RSYND)
{
PlayerUtil.openPage(PlayerContextManager.getInstance().currentContextRules.targetCouillon);
return;
*
if (PlayerContextManager.getInstance().currentContextName == PlayerContext.CONTEXT_PLAYER_PUB || PlayerContextManager.getInstance().currentContextRules.hasPiegeACouillon && !(super.playerDataManager.flashVars.playerType == "watPlayer" && super.playerState.currentMediaObject.media.visibleOnWAT != false))
*
if (PlayerContextManager.getInstance().currentContextName == PlayerContext.CONTEXT_PLAYER_PUB || super.playerDataManager.flashVars.playerType == "watPlayer" && super.playerState.currentMediaObject.media.visibleOnWAT != false || super.playerDataManager.flashVars.playerType == "tf1Player" && super.playerDataManager.flashVars.permalink != null)
{
PlayerUtil.openPage(PlayerContextManager.getInstance().currentContextRules.targetCouillon);
*
}
else if (super.playerState.currentPlayerState == PlayerState.CURRENT_PLAYER_STATE_WAITING)
*
super.playerState.currentPlayerState = PlayerState.CURRENT_PLAYER_STATE_PAUSING;
*
else
*
super.playerState.wishPlayerState = PlayerState.WISH_PLAYER_STATE_PLAY;
*
break;
}
Traduisez par: "Si un couillon clique sur la pub, alors on le redirige sur le site concernant la pub" (targetCouillon). On voit clairement que pour les développeurs, la pub est un simple piège à couillons.
Le mot de la fin
J'espère que cette bourde ne traduit pas une considération en place chez TF1, qui consiste à considérer les internautes comme des "couillons", parce que sinon ils sont bien mal partis. De plus, je pense sincèrement que les annonceurs de TF1 et de WAT apprécieront leur humour (ou pas).
<article43|flattr>