Augmentez la sécurité de votre identité en ligne

Mon compte courriel personnel Gmail est au centre de mon identité en ligne, depuis que j’ai été en mesure de le créer en 2004. Tous les courriels personnels que j’ai envoyés et reçus ont passés par ce compte.

Avez-vous réfléchi aux conséquences possibles si un individu mal intentionné mettait la main sur votre compte courriel?

Plusieurs possibilités sont sur la table. D’une part, il pourrait envoyer des courriels frauduleux en votre nom. En deuxième lieu, tenter de mettre la main aux comptes que vous possédez à votre insu. Ensuite? Qui sait ce qu’un individu mal intentionné peut faire pour mal faire.

À titre d’exemple, j’ai vu passer cela sur mon fil de nouvelles Facebook. Il s’agit d’un ami avec qui j’ai étudié au CEGEP.

Il est vrai que de se faire pirater son compte courriel peut être humiliant.

J’ai aussi en tête l’histoire de contournement du nom de domaine du blogue http://secretgeek.net. Pour faire simple, un pirate russe a mis la main sur le mot de passe de son compte courriel. En tirant profit d’une faiblesse dans le protocole POP3, il a été en mesure de deviner son mot de passe par une attaque par force brute. Ensuite, il a procédé au transfert des noms de domaines en sa possession.

Dans les dernières années, j’ai vu énormément de cas similaires. Tous ont d’énormes conséquences. Il est difficile d’estimer où le pirate a pu se rendre avec vos informations courriels. En général, il est recommandé de réinitialiser tous vos mots de passes sur les services en lignes que vous utilisez. Cela passe de Facebook à votre compte bancaire.

D’ailleurs, avez-vous une liste des services qui pourraient être compromis en cas d’une brèche à votre compte courriel?

Il existe deux éléments de prévention pour vos comptes courriels :

  • Utilisation d’un mot de passe complexe
  • Activation du mécanisme d’authentification en deux étapes.

Tout le monde le dit, personne ne le met en application. Votre mot de passe doit être complexe ou d’une bonne longueur.  Une technique intéressante pour obtenir un mot de passe d’une certaine complexité est d’en faire une phrase. L’avantage de celle-ci est qu’il est beaucoup plus simple de se souvenir d’une phrase composé d’un acrostiche de votre prénom qu’un simple mot de 8 caractères se terminant par un astérisque.

Prévisiblement, dans le top 25 des mots de passe les plus fréquemment utilisés sur le web, des aberrations comme 123456qwerty111111passw0rd s’y retrouvent.

L’authentification en deux étapes est un mécanisme ajoutant une étape obligatoire nécessitant la saisie d’une série de chiffres générés par une clé unique configurée au préalable entre vous et le service courriel.

Gmail

Pour le service Gmail, l‘activation de cette fonctionnalité se fait dans vos paramètres de comptes. Alternativement, vous pouvez aussi consulter un guide illustré mis à votre disposition par Coding Horror.

À ce sujet, je recommande fortement d’utiliser l’application iPhone, Android ou même BlackBerry. Sinon, un code vous sera envoyé par SMS ou communiqué par téléphone.

Hotmail

L’authentification en deux étapes n’existe pas pour Hotmail. Toutefois, un mécanisme similaire peut être activé. Il s’agit d’un code à utilisation unique vous permettant d’accéder à votre compte courriel sans avoir à entrer votre mot de passe. Ce code vous est envoyé par SMS. La différence est que ce code n’est pas une deuxième étape dans le processus de connexion mais bien une alternative au mot de passe.

Si vous désirez l’activer cette fonctionnalité, suivez les étapes tel que documenté par Microsoft.

Pour la suite des choses, il serait souhaitable que les principaux services puissent offrir une sécurité augmentée avec un  mécanisme d’authentification à deux étapes.

Facebook

Depuis déjà un moment, Facebook a annoncé la mise en place d’une fonctionnalité nommée Login Approval permettant l’envoi d’un code par SMS lorsque vous tentez de vous connecter à Facebook avec un ordinateur ou appareil non reconnu.

Dropbox

Finalement, Dropbox a récemment annoncé l’activation d’une authentification en deux étapes pour ses utilisateurs. L’activation est assez simple. Visitez l’adresse http://www.dropbox.com/try_twofactor. L’idée intéressante pour Dropbox est que le générateur de clé utilise la même application que celle utilisée par Gmail. Une pierre, deux coups!

Mot de la fin

Il est évident que l’ajout de mesures de sécurité supplémentaires implique l’ajout d’étapes et complique de façon significativement le processus de connexion à votre service préféré en plus de vous forcer à garder votre téléphone cellulaire à portée de main.

Toutefois, savoir que la possibilité de sécuriser l’accès à votre compte devrait prévaloir sur la facilité d’accès. Dans mon cas, c’est ce que j’ai décidé de faire.

Après tout, il est hors de question que je laisse une partie de mon historique en ligne dans les mains d’un inconnu qui aurait pu deviner mon mot de passe.

Publicités

NGINX

Qu’est-ce que NGINX? Son nom laisse présager peu de choses à vrai dire. NGINX se prononce comme Engine-X.

Il s’agit d’un logiciel qui agit comme un proxy inverse. C’est à dire qu’il va se placer en amont du ou des serveurs web et prendre, à leur place, la charge des requêtes web.

D’un point de vue de sécurité, il peut être utilisé pour abstraire totalement l’accès aux ressources web qui sont sur les serveurs. Par exemple, il est possible d’associer les requêtes du serveur A et B à des URL comme http://www.monsite.com/a/ et http://www.monsite.com/b/ sans que cela ne paraisse pour le commun des mortels.

Dans la majorité de cas, un proxy inverse comme NGINX est utilisé comme un outil permettant d’augmenter la performance d’un site web. Il est possible de répartir la charge des requêtes vers une ressource statique sur plusieurs serveurs ou même de procéder à la mise en cache localement du contenu accessible à partir du web.

Il est aussi possible d’utiliser NGINX comme un proxy de serveur courriel POP3, IMAP et SMTP.

NGIX est présent sur le web depuis maintenant huit ans et est développé sous une licence libre de style BSD. Initialement, il a été développé par un développeur Russe nommé Igor Sysoev. Les premières utilisations de NGIX ont été avec les sites de premier ordre Russes comme Yandex, Mail.ru et même Rambler.

Depuis,  l’utilisation de NGINX est en constante hausse. Des sites américains de haut niveau l’ont intégré dans leur architecture. On peut noter des sites comme Netflix, Pinterest et même Github.

Le principal point de vente de NGINX est sa capacité à prendre une charge considérable de requêtes simultanées avec une faible et prévisible trace en mémoire. Son architecture, basée sur des événements,  lui permettant, de façon asynchrone, de gérer les requêtes entrantes. Son architecture a été conçue spécifiquement pour adresser la problématique du C10k.

Qu’est-ce que le C10k? Il s’agit du nom qui a été donné à la problématique d’optimisation des serveurs applicatifs pour leur permettre de fournir plus de 10 000 connexions simultanées.

Pour les fans de statistiques, il est question d’une utilisation d’environs 2.5mo de mémoire pour chaque 10 000 connexions.

L’éventail des plateformes supportées est assez large. NGINX a été initialement développé pour les plateformes UNIX/Linux. On peut aussi noter que Windows est supporté.

NGINX n’est pas le seul de sa catégorie. Il existe d’autres solutions offrant un même genre se possibilités. Il y a notamment HAProxy qui agit un proxy inverse mais aussi et principalement comme un répartiteur de charge (Load balancer) ou même Varnish qui permet uniquement une cache HTTP.

À première vue, si j’avais l’occasion d’implémenter proxy inverse dans l’un de mes sites web, je le ferais initialement pour le contenu statique. Cela passe par les images mais aussi pour les scripts et les feuilles de style. Ils ne changent pas très souvent et ils peuvent être distribuées aux clients sans que ça ait à passer par le serveur web.

En plus de la cache, ces fichiers n’auraient l’obligation d’être distribuées sur le même serveur que celui qui en charge des pages web. Il pourrait y avoir un serveur dédié à l’hébergement du contenu statique.

La cerise sur le Sundae est l’annonce par l’équipe de développement de NGINX du support pour le protocole SPDY. Ce n’est pas déjà assez pour se laisser tenter par l’expérience?

SPDY – Le nouvel acronyme du web à venir

L’internet a toujours été une source d’innovation et de tentatives pour rentre l’expérience utilisateur la plus agréable possible. Cette amélioration se fait à plusieurs points. Il va d’améliorations à l’ergonomie design des pages web en passant par la façon dont les pages web sont indexées par les moteurs de recherche.

Un facteur reste, toutefois, au cœur des préoccupations lorsqu’il est temps d’améliorer l’expérience utilisateur sur le web : La vitesse. La rapidité à laquelle les données doivent être communiquées au visiteur est littéralement le nerf de la guerre. Ce constat est très analogue au concept de la saucisse Hygrade : Plus tu sers de contenu rapidement, plus tu seras capable d’en servir, plus ton site paraîtra rapide et mieux il sera référencé.

SPDY, c’est quoi?

SPDY (Comme dans l’expression Speedy) est un protocole développé par Google depuis déjà 2009. Le but de ce protocole est de remplacer directement HTTP 1.1 qui est le protocole de-facto sur Internet.

Un groupe de travail de l’IETF (Internet Engineering Task Force) a été mis en place pour définir quel sera le protocole sera utilisé pour ce qui a été nommé comme HTTP 2.0. Comme tout ce qui a trait à la standardisation des procédures et technologies entre les gros joueurs d’internet, l’enjeu est important car il est de déterminer quel protocole sera recommandé pour l’implémentation de HTTP 2.0.

Au menu, il y a trois protocoles à l’étude :

D’un point de vue technique

L’avantage proposé par SPDY est qu’il est conçu pour utiliser moins de connexions TCP que HTTP et il est aussi conçu pour utiliser TLS par défaut. Ceci veut donc dire que SPDY est par design plus rapide et surtout plus sécuritaire que HTTP.

Il faut aussi noter que SPDY est un ajout au fonctionnement actuel de HTTP. C’est à dire que SPDY modifie seulement la façon que les paquets de données sont envoyées par les serveurs aux clients. Cette modification se fait au niveau de l’ajout d’une couche Session (Bien située entre HTTP et SSL) lors d’une connexion TCP.

Comment plus rapide?

Le gain de vitesse de téléchargement est très intéressant. Selon les scénarios suggérés (Section Preliminary results), le gain de téléchargement varie entre 30% et 63%.

À titre d’exemple, un téléchargement qui prend 3111.916 millisecondes avec HTTP son équivalent avec SPDY prend environs 1695.72 millisecondes. Ici, on parle d’un gain de 45%.

Vocabulaire

La venue de ce nouveau protocole implique aussi un changement au niveau de la terminologie utilisée pour désigner les éléments faisant partie d’une connexion SPDY.

  • Stream : Représente l’équivalent d’une connexion / réponse du protocole HTTP.
  • Frame : Un Stream est divisé en Frames. Un Control Frame contient les entêtes HTTP et un Data Frame contient les données de ce frame.

L’ordre d’exécution

Le plus simple des scénarios prévoit l’exécution suivante  :

  • Le client initie une requête SYN_STREAM.
  • Le serveur envoie une réponse SYN_REPLY.
  • Le serveur envoie un ou plusieurs éléments DATA. Ceux-ci contiennent les données à retourner au client.

L’implémentation

SPDY est actuellement supporté entièrement par Google Chrome/Chromium et Firefox. Toutefois, il n’est pas activé par défaut chez Firefox. Pour l’activer, il faut aller mettre la variable network.http.spdy.enabled à true dans la section about:config.

Tout récemment, Opera a mis de l’avant le support de SPDY dans une version expérimentale de leur navigateur.

Il reste maintenant à Internet Explorer et Microsoft d’implémenter SPDY dans leur navigateur. Le chemin ne semble tout à fait clair de ce côté. Microsoft propose lui aussi un protocole visant à améliorer la vitesse de connexion au web : HTTP Speed+Mobility. Il semble donc que, tant et aussi longtemps qu’il n’y aura pas consensus sur le protocole à utiliser, Microsoft va être adepte du statut quo pour Internet Explorer.

Engagement envers SPDY

Il va de soi que Google a déjà mis de l’avant, il y a de ça un bon moment, SPDY sur ces services. SPDY est utilisé notamment chez GMail, Google+ ainsi que la recherche Google.

Des acteurs  importants du web ont signifié leur intérêt envers la bonification proposée du protocole HTTP.  Il y a notamment :

Est-ce que mon site est déjà SPDY?

Il y a actuellement deux indicateurs permettant d’identifier si un site utilise déjà SPDY.

La console interne de Google Chrome. Cet outil est accessible par l’adresse chrome://net-internals/#spdy. Dans la section « SPDY Sessions », vous pouvez voir un résumé des sites ainsi que certaines statistiques d’utilisation de SPDY du navigateur. En bonus, vous pouvez voir en temps réel le déroulement des connexions SPDY en cliquant sur le lien View live SPDY sessions.

Dans le cas où vous n’êtes pas très orienté statistiques et détails internes, je vous conseille d’installer l’extension vous permettant d’activer un témoin visuel pour indiquer la présence d’une connexion SPDY.

Ce qu’attends SPDY

SPDY / HTTP 2.0 a un bel avenir devant lui.

Le protocole livre exactement ce qu’il promet : Une amélioration de la vitesse de téléchargement du contenu qu’une page web. Le plus magique dans tout cela est que la transition à SPDY se fait sans aucun impact aux applications et aux utilisateurs. Cela veut dire que l’implémentation de SPDY se fait de façon transparente.

Le support pour SPDY est encore embryonnaire. Nous allons entendre encore plus en parler à mesure que les grands joueurs (ex: Facebook) vont le proposer à ses utilisateurs.

Touver le bon MimeType pour son fichier

Lors d’un développement que j’ai eu à faire récemment, je me suis posé la question suivante : Quel est le MIME type du fichier que je suis sur le point d’envoyer en réponse?

Un MIME type (Ou Content-Type, c’est selon) est l’un des mécanismes important lorsqu’il est temps de distribuer le contenu au client. C’est ce qui permet d’identifier le type de contenu que le serveur vous envoie. Pourtant, de mémoire, je ne pourrais qu’en nommer deux ou trois tout au plus.

Si vous n’êtes pas plus capable de moi d’en nommer par cœur, rassurez-vous car il s’agit de quelque chose qui est normalement géré par votre serveur web.

Pour ceux qui sont du genre à lire des RFC, le RFC 2046 est celui qui définit le standard appelé : Multipurpose Internet Mail Extensions (MIME). Il met sur la table tout ce qui est nécessaire afin d’être en mesure de transférer un fichier binaire à travers un courriel qui est transféré uniquement en texte.

Le concept a été initialement prévu pour le courriel. Son utilisation a été étendue à d’autre protocoles incluant HTTP, comme dans le cas qui nous intéresse.

Prenons en exemple une réponse typique d’une requête à http://en.wikipedia.org/wiki/Internet_media_type.

À la ligne trois, l’identifiant Content-Type nous indique à quel type de contenu auquel nous avons face. Dans ce cas-ci, il s’agit d’une simple page HTML utilisant l’encodage UTF-8.

Le Content-Type est composé de trois éléments sous le format suivant : Type / Sous-Type; charset=Encodage. Sachez que l’encodage est optionnel.

La problématique à résoudre

Il est essentiel d’identifier son fichier lorsqu’on l’envoie au client au risque que ce qui est envoyé va être soit ouvert par la mauvaise application ou même simplement affiché comme un flux binaire à l’écran. Ce qui n’est pas vraiment très très utile.

Il existe plusieurs façon d’arriver à sa fin pour l’identification de son Content-Type. Les façons se résument à :

Ce que j’ai préféré faire

Étant un paresseux de nature, j’ai préféré y aller vers une solution sollicitant le moins d’effort possible. Mes recherches m’ont dirigé vers le repository Github nommé csharp-MimeType-Dictionnary.

Mon premier réflexe a été de me demander pourquoi je n’y avait pas pensé avant? L’idée aussi d’extraire le catalogue des MimeTypes d’un site pour les mettre dans un Dictionnaire par la suite!

L’utilisation de cette librairie est comme vous le comprendrez est très simple :

var mime = MimeTypeDictionary["pdf"]

Sans révolutionner le monde du développement web, ce dictionnaire permet rapidement d’avoir accès au MimeType d’un fichier donné sans avoir à le rechercher sur internet. Pour moi, il s’agit d’une économie de temps. Moins que je passe de temps à chercher de l’information plus je suis productif.

Une fois de plus, il faut remercier internet. :)