Skip to main content

Acheter et utiliser des bitcoins

Présentation du bitcoin

Le bitcoin est une monnaie décentralisée, donc fonctionnant sans autorité centrale. C’est à dire qu’aucune banque ne la gère ou la distribue. À la place, chaque utilisateur qui utilise des bitcoins se retrouve en possession d’une partie du gigantesque livre de comptes mondial des utilisateurs du bitcoin. Dans se livre se trouve l’intégralité des transactions bitcoin.

D’ailleurs, comment sont générés les bitcoin ? Comme le dit Ploum dans son article Bitcoin pour les nuls, « chaque bitcoin est en fait la solution à un problème mathématique ultra-complexe. De par sa conception, nous savons qu’il existe un total de 21 millions de solutions différentes à ce problème mathématique« . Afin de générer des bitcoins, il faut donc utiliser un logiciel qui va « miner », c’est à dire réaliser des opérations cryptographiques visant à trouver une des solutions à ce problème. Lorsqu’une solution est trouvée, le système « récompense » l’utilisateur par une quantité plus ou moins importante de bitcoins.

Nous savons qu’il existera au maximum 21 millions de bitcoins dans le monde. Ce chiffre de 21 millions devrait être atteint aux alentours de 2033. Plus le temps passe, plus les solutions sont difficiles à trouver. Il faut donc des machines de plus en plus puissantes pour « miner du bitcoin » : il s’agit de cartes graphiques que l’on désigne par le terme « asic » (les cartes graphiques sont plus puissantes que les processeurs pour ce genre d’opérations).

Nombre de bitcoin en circulation en fonction du temps

Bref, tout ça pour dire que nous n’allons pas miner nous même du bitcoin, mais en acheter auprès d’autres personnes qui en possèdent déjà. Nous allons pour cela passer par une place de marché européenne, Paymium (anciennement Bitcoin-Central). On n’est pas obligés d’acheter des bitcoins entiers (car le cours est en ce moment environ à 450€ le bitcoin), mais on peut tout à fait en acheter des décimales (exemple : 0.2531 btc).

Attention : le bitcoin n’est pas une monnaie anonyme (voir cet article), dans le sens où tout le monde peut voir quelle quantité de bitcoins a transité d’une adresse vers l’autre (une adresse est une suite de caractères aléatoires générée automatiquement). Cependant, on peut faire en sorte que personne ne sache qui se cache derrière telle ou telle adresse.

Depuis la sortie de cet article, de nombreux sites ont été développés pour acheter des bitcoins. Le site dont j’explique le fonctionnement ci-dessous n’est pas le plus simple à utiliser, notamment parce qu’il faut envoyer sa carte d’identité, puis pour chaque procédure d’achat de bitcoins, il faut passer par un virement bancaire, ce qui est très lent.

Je recommande aujourd’hui de choisir un autre site parmi ceux-ci, un qui permettra d’acheter des bitcoins par carte bancaire. Je n’en ai essayé aucun, je ne peux donc pas conseiller l’un plus que l’autre, mais je vous recommande d’en choisir un simple, qui accepte le paiement par CB, et ne nécessite pas de vérification d’identité.

Une fois que vous aurez choisir une plateforme d’achat, créé un compte, et acheté des bitcoins, vous pourrez reprendre la lecture de ce guide au chapitre « Rapatrier ses bitcoins sur un porte-monnaie virtuel ».

Se créer un compte sur la place de marché Paymium

Avant de commencer, sachez qu’utiliser le bitcoin est tout à fait légal. Les autorités s’en mordent un peu les doigts, car les transactions ne peuvent pas être surveillées. Mais posséder des bitcoin n’est pas illégal : le flou juridique règne encore.

Nous allons commencer par créer un compte sur Paymium. Afin de pouvoir acheter des bitcoins, vous devrez justifier de votre identité, et donc transmettre des documents justificatifs à Paymium (type carte d’identifié, justificatif de domicile, RIB…). Pas de panique : il s’agit d’une société française, reconnue, et fiable. Attention, la procédure peut-être longue (deux ou trois semaines). À plus tard !

Nous voilà deux ou trois semaines plus tard ; vous avez transmis vos documents, Paymium a validé votre compte. Connectez-vous : vous arrivez sur votre tableau de bord.

La première chose à faire est d’alimenter votre compte en euros : pour cela, cliquez sur la rubrique du menu de gauche « Alimenter votre compte en euros », où tout sera expliqué pour faire un virement bancaire. Veillez à bien saisir votre identifiant (de la forme BC-Uxxxxxx) dans le champ « Motif » ou équivalent du site de votre banque. Sans ça, Paymium ne saura pas sur quel compte transférer l’argent que vous lu aurez envoyé, et il vous faudra engager une procédure pour le récupérer. Là encore, il faut patienter (juste 2 ou 3 jours).

Échanger des euros contre des bitcoins

Une fois en possession d’euros sur votre compte, cliquez sur « Échanger » dans le menu de la barre du haut, puis sur « Acheter des bitcoins » dans le menu de gauche. Le petit formulaire présente deux champs que vous pouvez modifier : Prix, et Quantité. En effet, comme le Bitcoin est une monnaie dont le cours est fluctuant, vous pouvez spécifier le prix auquel vous souhaitez l’acheter. Vous aurez beaucoup plus de chances de voir votre ordre accepté si vous saisissez un prix élevé (les vendeurs seront mieux payés), mais cela vous fera alors moins de bitcoins pour vous. C’est pour cela que je vous recommande de laisser la valeur qui s’inscrit dans la case « Prix » au chargement de la page.

Pour remplir la case « Quantité », vous allez devoir procéder par tâtonnement en saisissant des décimales (exemple : 0,2532 bitcoin) afin que le total soit proche de l’argent que vous avez viré sur votre compte (ou pas, vous pouvez choisir de n’en échanger qu’une partie). Une fois que vous êtes satisfait, cliquez sur « Acheter ».

Normalement quelques secondes après, votre ordre est exécuté : victoire ! Vous possédez des bitcoins. Nous allons maintenant les rapatrier dans un porte-monnaie virtuel.

Rapatrier ses bitcoins sur un porte-monnaie virtuel

Il existe deux manières de stocker ses bitcoins : « à froid » (cold storage) ou « à chaud » (hot storage). Le premier type est, pour moi, le plus sécurisé car le porte-monnaie est situé chez vous, sur votre ordinateur. Vous pouvez même le déplacer sur une clé USB ou un disque-dur, voir l’imprimer (en fait, un porte-feuille est juste une adresse de caractères aléatoires, dont l’accès peut être protégé par mot de passe ou clé). L’inconvénient est que si vous supprimez votre porte-feuille ou si vous vous faites voler votre ordinateur, les bitcoins stockés dans votre porte-feuille seront définitivement perdus.

C’est pour cela que certains préfèrent utiliser le hot storage, c’est à dire des services de portefeuille virtuel en ligne. À vous de voir ce que vous préférez (lisez choisir votre portefeuille Bitcoin). En tout cas, mon tuto s’appuiera sur du stockage à froid, qui présente l’avantage d’être facile d’utilisation pour des transactions ponctuelles et peu importantes.

Téléchargez le logiciel Electrum (gratuit). À l’ouverture, vous pouvez aller dans Tools > Preferences > Appearence pour passer la langue en français si vous le souhaitez (puis redémarrer le logiciel pour prendre en compte les changements). Allez ensuite dans Fichier > Nouveau / restaurer afin de créer un portefeuille. Donnez-lui un nom, puis cliquez sur Suivant.

Je vais ensuite passer rapidement sur la suite des opérations : sachez juste que l’on définit certains paramètres de sécurité liés au portefeuille. Choisissez « Standard Wallet », Suivant, « Create a new seed », Suivant, « Standard », Suivant.

On arrive alors sur une page de « Génération de graine », qui présente des mots choisis aléatoirement. Procédez religieusement comme indiqué et écrivez ces mots sur une feuille de papier que vous conserverez en sécurité. Si un jour, vous perdez l’accès à ce portefeuille (et donc à l’argent qui pourrait y être stocké), la connaissance de ces mots vous permettra d’y regagner l’accès. Vous pouvez également cliquer sur l’espèce de code barre en bas à droite, afin de générer un QRcode. Avoir ce QRcode en sa possession revient à connaître les mots : vous pouvez donc enregistrer l’image puis l’imprimer, si vous ne voulez pas noter les mots.

Après avoir cliqué sur Suivant, le logiciel vous demande de retaper les mots. Et oui, c’est pas de la blague : ces mots sont la seule manière de regagner l’accès à votre portefeuille, et donc vous éviter de perdre des sous. Le logiciel prend soin de vous 🙂 Si vous êtes passé par le QRcode, vous pouvez aller le sélectionner en cliquant sur l’icône de dossier, et en navigant jusqu’à l’image du QRcode que vous avez enregistrée précédemment. Tant que vous ne pourrez pas cliquer sur Suivant, c’est que vous n’aurez pas saisi les mots correctement.

L’étape suivante consiste à choisir un mot de passe. Plutôt que de choisir votre prénom et votre date de naissance comme vous le faites habituellement (je vous connais), je vous conseille d’utiliser un gestionnaire de mots de passe tel que KeePass (gratuit). Ce genre de logiciel vous permet de gérer les multiples noms d’utilisateurs/mot de passe que vous utiliser au quotidien. Oui, vous devez utiliser un mot de passe différent pour chaque site. Vous pouvez trouver de bons tutos sur Internet. Allez, je suis sympa, je vous mets le tuto de la CNIL :

Après avoir cliqué sur Suivant, on arrive sur l’interface principale du logiciel :

Allez dans l’onglet « Recevoir ». Vous pourrez voir qu’une adresse Bitcoin vous a été générée : copiez-la dans votre presse-papier en cliquant sur la petite icône bleue. Vous pouvez saisir une description si vous le souhaitez : elle sert uniquement pour vous y retrouver, vous n’êtes pas forcément obligés d’en indiquer une. Laissez le reste des réglages par défaut (pas de montant et pas d’expiration). Cliquez ensuite sur Enregistrer.

L’adresse Bitcoin que vous avez actuellement dans votre presse-papier est celle à indiquer sur le site où vous avez acheté vos bitcoins. Cela permet au site de savoir que les bitcoins que vous avez achetés doivent être virés sur ce portefeuille.

Note aux pirates du dimanche : j’ai flouté les infos confidentielles par principe, mais y a pas eu d’argent qui a transité par ce portefeuille, et il a été supprimé une fois que j’ai pu prendre mes captures d’écran, donc ne perdez pas votre temps 🙂

Envoyer des bitcoins

Pour envoyer des bitcoins à quelqu’un, rien de plus simple : cliquez sur l’onglet Envoyer, saisissez l’adresse de votre correspondant, un commentaire éventuel dans la case Description puis le montant. Terminez en cliquant sur Envoyer, où il vous sera demandé le mot de passe de votre portefeuille.

Notez que chaque transaction nécessite des frais collectés par le réseau. Donc vous ne pourrez pas virer l’intégralité de votre porte-monnaie, vu qu’il faut prendre en compte les frais. Plus les frais sont importants, plus les virements sont effectués rapidement. Les frais augmentent avec le temps, au fur et à mesure que de plus en plus de gens utilisent le Bitcoin, et qu’il y a donc de plus en plus de transactions à traiter… c’est l’inconvénient de la démocratisation de cette technologie.

Lorsque votre virement aura été envoyé, il nécessitera l’approbation de quelques peers (utilisateurs) du réseau. Personne ne validera votre transaction à la mimine, hein, ce sera automatique. Comme je le disais, ceci est dans le but d’éviter la fraude et la duplication de bitcoins (tout le monde possède une partie du livre de comptes). Donc là encore, il vous faudra attendre un moment, le temps que votre transaction soit approuvée puis validée par le réseau.

Conclusion

Nous avons vu comment obtenir et rapatrier des bitcoin. Quoi que vous décidiez d’en faire par la suite, gardez à l’esprit que vous n’êtes pas totalement anonyme, car tout le monde peut voir quelle quantité de bitcoin a transité de telle adresse vers telle autre adresse (exemple).

Toutefois, il peut être difficile de remonter jusqu’à une adresse qui vous identifie en multipliant les transferts entre des portefeuilles que vous aurez créés. C’est ce qu’on a fait dans ce tuto, en se servant du portefeuille comme d’un relai. Vous pouvez ainsi multiplier les relais si vous souhaitez d’avantage de sécurité.

Vous pouvez également utiliser un service de bitcoin laundering (blanchiment) afin de mélanger vos bitcoins avec ceux des autres, et qu’on ne sache plus quels bitcoins proviennent de quelle adresse. Oui, comme la mafia ! Je vous laisse vous renseigner sur ce principe.

N’hésitez pas à poser vos questions ou à me signaler des erreurs/imprécisions 🙂

Lire la suite

Communiquer de manière sécurisée

Ce tuto va vous montrer comment échanger des messages sécurisés avec vos correspondants. En pratique, cela vous permettra donc :

  • de chiffrer vos messages : personne d’autre que la ou les personnes pour lesquelles vous avez écrit ce message ne pourront les lire
  • de signer/authentifier vos messages : votre ou vos destinataires auront la certitude que ce message provient bien de vous, et non pas de quelqu’un d’autre qui se ferait passer pour vous

Les techniques utilisées ici font appel au principe de cryptographie asymétrique. Pas de panique, on ne fera pas de maths : je vais tenter de tout expliquer de manière simple 🙂

Si la partie théorique vous ennuie, vous pouvez passer directement à la partie pratique.

En théorie : la cryptographie asymétrique

La cryptographie asymétrique repose sur un système de double-clés : une clé publique, et une clé privée. Pour sécuriser vos communications par ce moyen, vous devrez ainsi générer :

  • une clé privée : elle ne sera connue que par vous. Elle vous permettra de signer les messages que vous émettrez, donnant ainsi la certitude à vos interlocuteurs que vous êtes bien la personne qui écrivez le message, et non un usurpateur.
  • une clé publique : elle permettra à vos interlocuteurs de vous contacter. Vous pouvez la distribuer par le moyen que vous voulez aux personnes avec qui vous êtes susceptible de communiquer de manière sécurisée (sur votre blog, site Internet…), d’où son nom de « publique ». Ce n’est pas une donnée sensible, vous n’avez pas à la protéger.

Mais au fait, à quoi ressemble une clé ? Ce n’est évidemment pas une clé physique, mais ce n’est pas non plus une petite chaîne de caractère. C’est une grosse chaîne de caractères ! Voilà par exemple une clé publique que je viens de générer :

—–BEGIN PGP PUBLIC KEY BLOCK—–
Version: GnuPG v2.0.22 (MingW32)

mQENBFLhCF0BCADXHiOwloD0v2rDYP5s1B3eQcYZQnE2px1RITXtU6pgbPsDAXjB
oo/+FV0/nMTfbVGM/jisRchlvYIZ9zxROhMOBDtbxLpqkPeCIN2PMC6ByLv5TGXv
r2SD0XWq6Z2SpWh7LMyKFB142B9/aj8zQX7ZZDZMsbvkv7G3BKHBnDzkb4Ml7tnf
IdWEqaapiAHQsOygQLvsBAT4Lw9G9hfSCs9u57LeoYOAhM3eQIVfPzUPbQGJbFTf
tOufs7GAI0yNqa2SYEEBDeLTqnZLup2MCkDBrpdedTkI9jD8Z53Z7Ye1kND0x89+
HFsKgjrg1QfuaBapOAZHRdUNx+22l2IQmI8JABEBAAG0H2RyaGdoIDx0aHRyZGhy
ZGZoZHRoQGRyZ2RyZy5mcj6JATkEEwECACMFAlLhCF0CGwMHCwkIBwMCAQYVCAIJ
CgsEFgIDAQIeAQIXgAAKCRC9KpZfDnigX0GDB/9Rn5R24H2evRKwJGXQlv7ggFX+
fsQg4nASXewqHoIg7vZDRsOVODLQtcLMyik1CQ09oeCSv619yETHHtuh4T5a/1DI
+xtq3vpi4lxPfpWBYC60SmKzUsz8sC9bbrvcC3jU24CmjUPQzolAdbftFanP9yo0
/tKcs5iqbRpGnPj6FlJNKZ4Z2huM4atxKAJbgOFj5q8/ksh51E52cY2Z8WtgzrnJ
FYrmfrV/7doHDC/S/1dqifUCcruI0wmwdz42EINqhyV2x6m/qKcvg3Zr1qOuaU+M
88eq99BT7VUmjPNJShXBokc55nP0DH4izDQXT8RXGPLZ7djy6uy7+noXyhEQuQEN
BFLhCF0BCADE9Lxr5PcUbKWfOM4RIbn9DG7BIGWLOjxdq//PA4iDxz4kdmrTabRy
FZirOX4D+rH/6oLNJdUFRVGB9lHpo3YxxjErKNesV4m6WtVg1Vk+MlOojvJY4YX5
vWPKdaKBxcze/kw2HnYgtetTIjZE0WB8qhLOYQL4fi9mZAt1cOV7+FQhcPnYKH91
zVA9w2UE6srNyGqhYHoh6rcTVjxTqmJMy9Pg7WhrzhpWHxJyjCdWNK2w/yv9amIq
BkOoSPhMnExWlcsfkRZbimT9DSFow07O6d5knOloU3ISyhHUIomhfsE05/F2pmg5
CvTGUbIDLrAazNw2ayw2/DVqBwjyVYKPABEBAAGJAR8EGAECAAkFAlLhCF0CGwwA
CgkQvSqWXw54oF8R2QgA02ySsNfbrqCI/zTNdKLPpt7WQFTPmxd5cTp8zjDnCWhr
vln6EVtA0Uu79KPFsGyOhJYO9GRHHp2StWgzzbHobM9dzWHjQshY3iJYmHbizWDk
70jSQpIfOl+ZuoxQTgkc9QPIItlwlqJRmBwifZix1Gpypiz1FsjJVQ0aPDAY4KKg
C4XRXN7ugKYj1eytS2xEbxmQNquwwqK3KRjLIGCnkKhG9rX+fu6K/ONgrsp7YRNI
Ru+wC0C88y45vsTwcIMq5lLrsv12ACIDosIbHUc2jqjxfvCfwbY0wP3GH9U09qAx
nNRV++PCNpZGcY+IV9UidpXe/T8sQ4PxhTRpjwgRsQ==
=73Nv
—–END PGP PUBLIC KEY BLOCK—–

La clé privée a grosso-modo la même tête.

Remarque : pour toute la suite du tutoriel, veillez à ne pas négliger les en-têtes et pied de page des clés ou messages chiffrés (BEGIN PGP PUBLIC KEY BLOCK et END PGP PUBLIC KEY BLOCK avec les tirets) car ils font partie intégrante des clés/messages chiffrés. Si vous omettez ces parties en transmettant vos clés ou vos messages, ils ne pourront pas être correctement lus par les logiciels (et donc par vos correspondants).

Vous utiliserez donc la combinaison clé publique de votre interlocuteur + votre propre clé privée pour chiffrer vos messages. Pour déchiffrer un message qui vous a été envoyé, vous utiliserez uniquement votre propre clé privée.

À noter que votre clé privée est, pour plus de sûreté, protégée par une passphrase (comme un mot de passe, en un peu plus long) que vous choisirez bien entendu lors de sa création. Si quelqu’un récupère le fichier contenant votre clé privée sur votre ordinateur, il ne pourra pas se faire passer par vous (à moins de connaître votre passphrase). Vous devrez saisir votre passphrase chaque fois que vous aurez besoin d’utiliser votre clé privée.

Voici les traditionnels petits schémas, pour récapituler :

Cryptographie asymétrique - Étape 1
Alice donne sa clé publique (en vert) à Bob
Alice conserve sa clé privée (en rouge) secrète

Cryptographie asymétrique - Étape 2
Bob écrit un message en le chiffrant avec la clé publique d’Alice
Alice décrypte le message avec sa propre clé privée

Note : ces schémas proviennent de Wikipedia, et on été faits par l’utilisateur Odder.

En pratique : installer GPGforWin et se générer une paire de clés

Désolé par avance pour nos amis Linuxiens : ce tuto s’adresse principalement aux utilisateurs de Windows, étant donné que c’est le système que j’utilise quotidiennement, et que c’est aussi le système utilisé par le plus grand nombre.

On commence donc par installer le logiciel gratuit : GPGforWin. Vous pouvez tout à fait télécharger la version Light, mais pas la version Vanilla car elle ne contient pas le composant GnuPA (Gnu Privacy Assistant) dont nous aurons besoin. C’est d’ailleurs le seul composant à cocher pendant l’opération (pour le but de ce tuto, bien sûr ; les autres composants peuvent être installés si vous le souhaitez) :

Installation de Gpg4Win et surtout GnuPA

Lancez ensuite le logiciel. On vous demandera directement quelques renseignements pour créer votre première clé privée : votre nom, puis votre adresse email. N’hésitez pas à inscrire de fausses informations si vous souhaitez être encore plus anonyme (pas de demande de confirmation de l’adresse email). On vous demandera ensuite une passphrase (un long mot de passe), puis enfin, l’endroit où vous souhaitez enregistrer votre clé sur votre disque dur (« Créer une copie de sauvegarde »). La procédure se terminera par la fenêtre suivante :

Génération de clé privée avec GnuPA

Remarque : chez moi, le logiciel plante après avoir généré et enregistré la clé privée. Si vous souhaitez générer d’autres clés privées (et donc d’autres identités), vous pouvez à tout moment aller dans le menu Clefs, Nouvelle clef… pour recommencer la procédure.

Fenêtre principale de GnuPA

Nous allons à présent générer la clé publique à partir de cette clé privée. Pour cela, dans la fenêtre principale du logiciel, sélectionner votre clé privée nouvellement créée, faites un clic-droit dessus, et choisissez « Exporter des clefs… ». Choisissez un endroit sur votre ordinateur, et cliquez sur « Enregistrer ». Ouvrez ce fichier avec un logiciel de type Notepad : l’intégralité du contenu représente votre clé publique, qui est à partager avec vos correspondants (sur la page de votre profil d’un site d’achat, sur votre site, blog…).

Écrire un message chiffré à quelqu’un

Pour écrire un message chiffré, il vous faut la clé de votre correspondant, que vous pouvez récupérer sur une page de profil, son blog/site… Enregistrez-la dans un fichier texte que vous placerez sur votre bureau (on pourra le supprimer par la suite).

Ouvrez GnuPG Privacy Assistant. Cliquez sur Clefs, Importer des clés, et sélectionnez le fichier texte contenant la clé publique de votre correspondant. Une fenêtre doit s’afficher, vous confirmant l’import réussi de la clé :

Import de clé publique dans GnuPA

Dans la barre d’outils du logiciel, cliquez sur Presse-papiers. Il se peut que vous deviez cliquer sur les petits chevrons >> sur la droite de la barre d’outils. Vous arrivez sur une zone où vous pouvez saisir votre message :

Presse-papiers de GnuPA

Une fois votre message écrit, cliquez sur l’icone Chiffrer dans la barre d’outils. La fenêtre suivante s’affiche : elle vous permettra, d’une part, de sélectionner la clé publique du destinataire à qui vous souhaitez envoyer votre message, et d’autre part, de signer votre message à l’aide de votre propre clé privée. Pour rappel, afin que votre destinataire puisse lire votre message, vous devrez lui avoir envoyé la clé publique associée à votre clé privée.

Choix des clés pour chiffrement

Cliquez sur Valider, et vous verrez s’afficher le texte de votre message chiffré :

Message chiffré avec GnuPA

Vous pourrez alors transmettre l’intégralité du presse-papiers à votre correspondant, qui devra alors le déchiffrer à l’aide de la méthode décrite à la section suivante.

Déchiffrer un message

Vous venez de recevoir un message chiffré, de la même tête que sur la capture juste au-dessus. Pour le déchiffrer, il vous faudra la clé publique de votre correspondant (si vous ne l’avez pas encore importée dans GnuPA, référez-vous au début de la section « Écrire un message chiffré à quelqu’un »).

Ouvrez le presse-papiers de GnuPA, et collez le message de votre correspondant. Cliquez sur Déchiffrer dans la barre d’outils du logiciel, et le message apparaîtra alors en clair (le logiciel se servira tout seul de votre clé privée et de la clé publique de l’émetteur du message). Si le logiciel vous indique que le presse-papiers ne contient pas de données OpenPGP valides, c’est que votre correspondant s’est trompé quelque part. Il devra alors recommencer la manipulation.

Conclusion

Nous avons donc vu dans ce tuto comment correspondre de manière sécurisée avec quelqu’un. Seule la personne à qui vous envoyez un message pourra le déchiffrer (à moins qu’elle ne se fasse dérober sa clé privée et le mot de passe associé). Voilà pourquoi il est important de protéger votre clé privée et de la verrouiller avec une passphrase solide.

Ceci est le premier article de sécurité informatique que j’écris. N’hésitez pas à me poser vos questions ou à me faire part de vos remarques ou corrections !

Lire la suite

La sécurité des formulaires PHP

Il est un domaine que l’on ne doit pas oublier lorsque l’on réalise des formulaires en PHP, c’est la sécurité. En effet, les formulaires sont très souvent liés à une adresse mail ou à une base de données ; il est donc judicieux de protéger ces éléments-clé d’un système d’information.

Loin d’être un guide absolu dans le domaine, cet article regroupera quelques bonnes pratiques pour sécuriser un formulaire que j’ai glanées au fil du web.

Choisir la méthode du formulaire

Le premier choix qui s’impose lors de la réalisation d’un formulaire, c’est la méthode de transmission des données d’une page à une autre. Il en existe deux : GET, et POST. Alors que la méthode GET transmet les variables récupérées dans un formulaire par l’URL, la méthode POST les transmet de façon masquée.

Il vous faudra donc choisir, au cas par cas, si les variables récupérées peuvent être affichées au visiteur dans l’URL, ou non. Notez que ce n’est pas parce que les variables sont transmises en POST qu’elles sont totalement invisibles, chiffrées ou sécurisées ; il reste possible de les afficher (ou plutôt, de les intercepter) avec des outils.

Les failles XSS (Cross Site Scripting)

Pour profiter d’une faille XSS, l’attaquant va tenter d’insérer un code (JavaScript, le plus souvent) dans un input d’un formulaire non protégé, ceci afin de modifier le fonctionnement de la page. Prenons le cas d’un forum ; un attaquant pourrait, en exploitant une faille XSS, faire en sorte de subtiliser le cookie de connexion de chaque utilisateur qui se connecterait à ce forum. Ou alors, rediriger tous les utilisateurs vers une page de connexion ressemblant trait pour trait à la charte graphique du forum, mais qui en fait ne servirait qu’à récupérer leurs identifiants de connexion.

Les injections SQL

Pour exécuter une injection SQL, l’attaquant va tenter d’insérer un code dans un input d’un formulaire non protégé qui est relié à une base de données. Ce code peut servir à supprimer tout ou partie de la base de données ! Mais dans le pire des cas, une injection SQL peut permettre d’outrepasser le système d’authentification d’un site, afin d’y entrer sans autorisation (et voir, d’y entrer avec les privilèges de l’administrateur).

Insertion dans une base de données

Pour être sûr que des attaquants n’exécutent pas des injections SQL sur notre base de données, nous devons protéger l’insertion d’une saisie utilisateur grâce aux fonctions :

  • mysql_real_escape_string() : échappe les caractères spéciaux (notamment ‘  » et NULL) par un antislashs ; étant donné que c’est une fonction de MySQL, vous aurez besoin de vous connecter à votre base avec un mysql_connect() avant de pouvoir l’utiliser
  • addslashes() : réalise la même chose que mysql_real_escape_string(), mais n’est à utiliser que si vous utilisez un type de base de donnée qui ne propose pas ce genre de fonction

Dans le cas où le site que vous développez ne requiert pas que les utilisateurs aient un jour à saisir du code informatique dans leurs messages, on peut utiliser la fonction strip_tags() afin de purement et simplement supprimer les balises de code HTML ou Javascript des messages des utilisateurs.

Affichage depuis une base de données (ou saisie utilisateur)

Trois fonctions s’offrent à nous pour éviter les attaques XSS. Avant de les utiliser, vous devrez vous demander si vous souhaitez que les utilisateurs puissent stocker du code source dans votre base, ou si vous considérez que rien de ce qui n’entre dans votre base n’a besoin d’être du code. Dans le cas d’un forum par exemple, un utilisateur peut légitimement poster un message avec du code sain (utilisez alors l’une des deux premières fonctions).

  • htmlspecialchars() : encode les caractères < > ‘  » & pour qu’ils soient affichés mais pas exécutés
  • htmlentities() : la même chose que htmlspecialchars(), à la différence qu’elle encode beaucoup plus de caractères ; par exemple, le symbole €, les lettres accentuées é à ù…
  • strip_tags() : supprime carrément toutes les balises contenant < et > qui ne seront pas affichées

Enfin, si vous souhaitez récupérer des données qui ont été insérées en étant protégées par htmlspecialchars(), htmlentities() ou addslashes(), il vous faudra utiliser respectivement htmlspecialchars_decode(), html_entity_decode() et stripslashes().

Exemple concret

Pour finir, voilà un exemple d’un formulaire, avec dessous, la partie « sécurisation » (remarque : ce code sera prochainement obsolète car PHP pousse à l’utilisation de la « PDO » ; voir mon commentaire plus bas pour un exemple d’utilisation) :

<form id="mon_formulaire" method="POST" action="formulaire.php">
	<input name=premier_champ type=text placeholder="Premier champ" required>
	<input name=second_champ type=number placeholder="Second champ" required>
<button type=submit name=envoi>Envoi</button>

<?php
if (isset($_POST['envoi']))
{
	// Connexion à la base de données
	mysql_connect($dbhost, $dbuser, $dbpass);
	mysql_select_db($dbname);
	
	// Sécurisation des données reçues
	$premier_champ = mysql_real_escape_string($premier_champ);
	$second_champ = mysql_real_escape_string($second_champ);
	
	// Création et envoi de la requête
	$sql = 'INSERT INTO ma_table VALUES("'.$premier_champ.'","'.$second_champ.'")'; 
	mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());  
	
	//Clotûre de la connexion à la base de données.
	mysql_close (); 

	// Affichage des résultats à l'utilisateur
	echo 'Vous avez inséré '.htmlspecialchars($premier_champ).'.';
}
?>
</form>

Voilà donc quelques méthodes simples pour éviter que votre formulaire soit une passoire 🙂 n’hésitez pas à m’indiquer dans les commentaires si vous avez d’autres astuces pour la sécurisation simple des insertions et lectures de base de données.

XKCD - Exploits of a mom

Pour aller plus loin
StackOverflow – How to prevent code injection attacks in PHP (EN)
Webmaster Hub – Sécurité et formulaires PHP
Apprendre PHP – Traitement des formulaires
Chez Neg – Sécurité d’un formulaire PHP
Bastien Rossi – Les injections SQL
Le blog de maniT4c – Protection de formulaire contre les robots

Lire la suite

Vérifier la sécurité d’un PC

La sécurité d’un ordinateur est quelque chose de primordial, auquel il faut faire attention constamment. Inutile de dire « je n’ai rien à cacher, pourquoi les pirates s’en prendraient à moi » : si votre PC n’est pas protégé, il peut servir de passerelle pour infecter d’autres PC.

Mais ce n’est pas toujours facile de savoir si son PC est sécurisé ou non ! Posséder un antivirus et un anti-malware ne fait pas tout : faire des mises à jour Windows Update régulièrement, s’assurer d’utiliser des logiciels à jour, ne pas faire des réglages laxistes, ça compte.

C’est pourquoi il existe des logiciels gratuits pour tester la sécurité d’un PC. Leur fonctionnement est simple, et ils vous fourniront le détail des failles de sécurité de votre système, et vous proposeront de l’aide pour les combler. Pas besoin d’être un expert dans le domaine !

Microsoft Baseline Security Analyser

Cet outil, proposé par microsoft, se basera principalement sur l’analyse des mises à jour de sécurité de Windows Update. Il détectera si vous avez bien fait toutes les mises à jour recommandées.

Téléchargez le logiciel correspondant à votre système (32 ou 64 bits), installez-le et lancez-le :

Le menu principal du logiciel s’affiche. Cliquez sur Analyser un ordinateur.

Cochez les mêmes options de sécurité que sur la capture suivante, puis cliquez sur Démarrer l’analyse.

À la fin, le logiciel vous sort un rapport détaillé de ce qui va ou pas sur votre système. Par exemple, comme vous le voyez sur la capture ci-dessus, j’ai plusieurs mises à jour non faites. Un lien apparait sous chaque ligne pour vous aider à résoudre le problème.

Secunia PSI

Le logiciel Secunia PSI se concentrera lui sur tous les logiciels non mis à jour. Par exemple, savez-vous que Adobe Flash et Acrobat Reader sont les logiciels les plus vulnérables ? Cela s’explique par le fait que tout le monde en a besoin. Les pirates ont donc plus de chance de s’introduire dans un système en passant par l’un de ces logiciels plutôt que par un logiciel que peu de gens utilisent.

Téléchargez, installez, lancez. Voilà la fenêtre principale :

Comme vous le voyez, une analyse se lance dès la première installation. À la fin, une petite fenêtre s’affiche et indique le résultat du scan :

Sur l’exemple ci-dessus, 3 programmes ne sont pas à jour. Plus en détail :

Pour chaque cas, le logiciel vous propose la solution pour résoudre le problème.

Bon sens

Pour terminer, voilà des petites règles de bon sens 🙂

Toujours disposer d’un antivirus à jour (Avast, par exemple). Inutile d’en avoir deux, ils entreraient en conflit l’un-l’autre. Un anti-malware (Malwarebytes’ Anti-Malware par exemple) est également un outil indispensable. Pensez à bien activer le pare-feu directement intégré dans Windows.

Enfin, si vous disposez d’une suite de sécurité complète payante (BitDefender, GData, Kaspersky…), les trois outils ci-dessus seront directement intégrés dedans, pas besoin donc de les rajouter.

Lire la suite