Chrome 76 va permettre un contournement plus aisé des murs de monétisation
En s'appuyant sur un mode Incognito « invisible »

Le , par Patrick Ruiz

63PARTAGES

7  0 
Qui, en parcourant la toile à la recherche d’une information, n’est pas encore tombé sur une fenêtre qui signale que « vous êtes arrivés à la limite du nombre d’articles consultables » ?


Une chose est sûre, des d’internautes se heurtent à cette difficulté et sur la même source d’informations (Internet), l’une des solutions que des tiers proposent est de passer en mode de navigation privée ou mode Incognito. L’usage de tels stratagèmes met la presse en ligne payante à mal, mais cette dernière trouve des solutions. Elles consistent en l’intégration de fonctions de détection du mode Incognito à leur système de gestion d’accès aux contenus en ligne. Sur la toile, on peut retrouver le code JavaScript sur lequel des éditeurs comme le Boston Globe s’appuient pour l’atteinte de cet objectif.

Code JavaScript : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// credit https://www.bostonglobe.com 
  
function isIE10OrLater(user_agent) { 
    var ua = user_agent.toLowerCase(); 
    if (ua.indexOf('msie') === 0 && ua.indexOf('trident') === 0) { 
        return false; 
    } 
    var match = /(?:msie|rv:)\s?([\d\.]+)/.exec(ua); 
    if (match && parseInt(match[1], 10) >= 10) { 
        return true; 
    } 
    // MS Edge Detection from this gist: https://gist.github.com/cou929/7973956 
    var edge = /edge/.exec(ua);  
	if (edge && edge[0] == "edge") {  
		return true;  
	} 
    return false; 
} 
  
function detectPrivateMode(callback) { 
	    var is_private; 
  
	    if (window.webkitRequestFileSystem) { 
	        window.webkitRequestFileSystem( 
	            window.TEMPORARY, 1, 
	            function() { 
	                is_private = false; 
	            }, 
	            function(e) { 
	                console.log(e); 
	                is_private = true; 
	            } 
	        ); 
	    } else if (window.indexedDB && /Firefox/.test(window.navigator.userAgent)) { 
	        var db; 
	        try { 
	            db = window.indexedDB.open('test'); 
	        } catch(e) { 
	            is_private = true; 
	        } 
  
	        if (typeof is_private === 'undefined') { 
	            retry( 
	                function isDone() { 
	                    return db.readyState === 'done' ? true : false; 
	                }, 
	                function next(is_timeout) { 
	                    if (!is_timeout) { 
	                        is_private = db.result ? false : true; 
	                    } 
	                } 
	            ); 
	        } 
	    } else if (isIE10OrLater(window.navigator.userAgent)) { 
	        is_private = false; 
	        try { 
	            if (!window.indexedDB) { 
	                is_private = true; 
	            }                  
	        } catch (e) { 
	            is_private = true; 
	        } 
	    } else if (window.localStorage && /Safari/.test(window.navigator.userAgent)) { 
  
	        // One-off check for weird sports 2.0 polyfill 
		    // This also impacts iOS Firefox and Chrome (newer versions), apparently 
	        // @see bglobe-js/containers/App.js:116 
	        if (window.safariIncognito) { 
	        	is_private = true; 
	        } else { 
						try { 
						   window.openDatabase(null, null, null, null); 
						} catch (e) { 
						   is_private = true; 
						} 
  
	        	try { 
		            window.localStorage.setItem('test', 1); 
		        } catch(e) { 
		            is_private = true; 
		        } 
	        }  
  
	        if (typeof is_private === 'undefined') { 
	            is_private = false; 
	            window.localStorage.removeItem('test'); 
	        } 
	    } 
  
  
  
	    retry( 
	        function isDone() { 
	            return typeof is_private !== 'undefined' ? true : false; 
	        }, 
	        function next(is_timeout) { 
	            callback(is_private); 
	        } 
	    ); 
}
Code JavaScript : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// credit https://www.breakingviews.com/ 
  
function incognitoBrowsers() { 
  return new Promise(function(resolve) { 
      var on = function() { 
          resolve(!0) 
      } 
        , off = function() { 
          resolve(!1) 
      }; 
      if (!window.webkitRequestFileSystem) { 
          if ('MozAppearance'in document.documentElement.style) { 
              var db = indexedDB.open('test'); 
              return db.onerror = on, 
              void (db.onsuccess = off) 
          } 
          if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) { 
              var isPrivate = !1; 
              try { 
                  window.openDatabase(null, null, null, null) 
              } catch (_) { 
                  isPrivate = !0 
              } 
              isPrivate ? on() : off() 
          } 
          return off() 
      } 
      window.webkitRequestFileSystem(0, 0, off, on) 
  }) 
}
Code JavaScript : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/* eslint-disable consistent-return */ 
  
let on; 
let off; 
  
const isSafari = () => { 
  if (Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0) { 
    return true; 
  } 
  
  if ( 
    // eslint-disable-next-line no-undef 
    (!window.safari || safari.pushNotification).toString() === '[object SafariRemoteNotification]' 
  ) { 
    return true; 
  } 
  
  try { 
    return window.localStorage && /Safari/.test(window.navigator.userAgent); 
  } catch (e) { 
    return false; 
  } 
}; 
  
const isMozilla = () => 'MozAppearance' in document.documentElement.style; 
  
const Webkit = () => { 
  if (window.webkitRequestFileSystem) { 
    window.webkitRequestFileSystem(window.TEMPORARY, 1, off, on); 
    return true; 
  } 
}; 
  
const Mozilla = () => { 
  if (isMozilla()) { 
    const db = indexedDB.open('test'); 
    db.onerror = on; 
    db.onsuccess = off; 
    return true; 
  } 
}; 
  
const Safari = () => { 
  if (isSafari()) { 
    // iOS 11 
    // Origin: https://gist.github.com/cou929/7973956#gistcomment-2272103 
    try { 
      window.openDatabase(null, null, null, null); 
    } catch (e) { 
      on(); 
      return true; 
    } 
  
    // Older Safari 
    try { 
      if (localStorage.length) off(); 
      else { 
        localStorage.x = 1; 
        localStorage.removeItem('x'); 
        off(); 
      } 
    } catch (e) { 
      // Original gist: https://gist.github.com/jherax/a81c8c132d09cc354a0e2cb911841ff1 
  
      // Safari only enables cookie in private mode 
      // if cookie is disabled then all client side storage is disabled 
      // if all client side storage is disabled, then there is no point 
      // in using private mode 
      navigator.cookieEnabled ? on() : off(); // eslint-disable-line no-unused-expressions 
    } 
  
    return true; 
  } 
}; 
  
const IE10Edge = () => { 
  if (!window.indexedDB && (window.PointerEvent || window.MSPointerEvent)) { 
    on(); 
    return true; 
  } 
}; 
  
export const checkPrivate = (onCb, offCb) => { 
  on = onCb || (() => {}); 
  off = offCb || (() => {}); 
  Webkit() || Mozilla() || Safari() || IE10Edge() || off(); // eslint-disable-line no-unused-expressions 
}; 
  
export const checkPrivateWhitelist = (onCb, offCb) => { 
  const whitelistOn = onCb || (() => {}); 
  const whitelistOff = offCb || (() => {}); 
  
  const privateButAllowed = [ 
    'FBAV', 
    'FBAN', 
    'FBIOS', 
    'FBBV', 
    'FBDV', 
    'FBMD', 
    'FBSN', 
    'FBSV', 
    'FBSS', 
    'FBCR', 
    'FBID', 
    'FBLC', 
    'FBOP', 
    'Twitter for iPhone', 
    'TwitterAndroid', 
    'nytios', 
    'nytiphone', 
    'nytipad', 
    'nyt-android', 
    'AppleNews', 
    'Flipboard', 
  ]; 
  
  const re = new RegExp(privateButAllowed.join('|'), 'i'); 
  if (re.test(navigator.userAgent)) { 
    whitelistOn(); 
    return true; 
  } 
  
  whitelistOff(); 
  return false; 
};
Code JavaScript : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function detectPrivateMode(cb) { 
  if( 
    navigator.userAgent.indexOf('WebKit') !== -1 
    && navigator.userAgent.indexOf('Mobile') !== -1 
  ){ 
    try { 
      window.openDatabase(null, null, null, null); 
      cb(false); 
    } catch (_) { 
      cb(true); 
    } 
  }else{ 
    var db, 
    on = cb.bind(null, true), 
    off = cb.bind(null, false) 
    function tryls() { 
        try { 
            localStorage.length ? off() : (localStorage.x = 1, localStorage.removeItem("x"), off()); 
        } catch (e) { 
            navigator.cookieEnabled ? on() : off(); 
        } 
    } 
    window.webkitRequestFileSystem ? webkitRequestFileSystem(0, 0, off, on) 
    : "MozAppearance" in document.documentElement.style ? (db = indexedDB.open("test"), db.onerror = on, db.onsuccess = off) 
    : /constructor/i.test(window.HTMLElement) || window.safari ? tryls() 
    : !window.indexedDB && (window.PointerEvent || window.MSPointerEvent) ? on() 
    : off() 
  } 
}

La bêta de Chrome 76 est disponible depuis peu. Avec cette dernière, les ingénieurs de Google annoncent des changements qui mettent à mal les scripts de détection que les éditeurs en ligne intègrent à leurs systèmes de gestion d’accès aux articles. « Le mode Chrome Incognito est détectable depuis des années, du fait l'implémentation de l'API FileSystem. À partir de Chrome 76, c'est corrigé. Toutes mes excuses pour les scripts de détection en mode privé qui existent », indique Paul Irish de Google. À partir de Chrome 76, le navigateur de Google ne transmettra plus l’information qui permet de savoir si le mode Incognito est activé ou non ; c’est dire que Google propose une espèce de mode Incognito « invisible ».


Sevré de la capacité à détecter le mode Incognito, il est impossible à un éditeur en ligne de s’appuyer sur les cookies pour savoir si l’internaute est un abonné ou un tiers qui a dépassé son quota d’articles. On se doute bien qu’il s’agit d’une solution qui ne saurait s’imposer de façon définitive puisque les éditeurs en ligne iront à l’abordage pour trouver des voies de contournement. Paul Irish pour sa part semble ne pas vouloir inciter les internautes à faire un usage systématique de cette possibilité pour accéder à des contenus payants.

« Devenir abonné à vos sources préférées de journalisme de qualité est incroyablement enrichissant. Si vous pouvez vous le permettre, je vous encourage à payer la poignée de dollars nécessaire », a-t-il ajouté.

En effet, chez Google, on s’est penché sur la question de l’implémentation de l’API FileSystem depuis la version 74 du navigateur. La manœuvre vise à éviter que des sites tiers puissent déterminer si un internaute est en mode de navigation normale ou privée. Comme quoi, chez Google, on est aussi soucieux de l’aspect vie privée des utilisateurs du navigateur.

Source : blog Chromium

Et vous ?

Qu’en pensez-vous ?

Voir aussi :

Google Chrome 75 est maintenant disponible avec 42 correctifs de sécurité et de nouvelles fonctionnalités
La version 75 de Google Chrome rendra les sites web incapables de détecter le mode Incognito, mais on peut déjà tester cette fonctionnalité sur Chrome
Google apporte des modifications à une API Chrome pour empêcher que les sites ne détectent le mode Incognito à partir de Chrome 74
Google Chrome 73 prendra en charge les touches multimédias de votre clavier et sera aussi livré avec l'API "Media Session"

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de TheLastShot
Membre extrêmement actif https://www.developpez.com
Le 15/06/2019 à 11:55
Si je comprends bien l'article, la solution la plus simple pour mettre le dawa c'est d'utiliser un plugin pour changer son user-agent et mettre n'importe quoi à la place, mais ça du coup c'est disponible depuis très longtemps sur plusieurs navigateur donc on peut le faire soi-même.
0  0 
Avatar de Gannon
Membre à l'essai https://www.developpez.com
Le 15/06/2019 à 19:15
Citation Envoyé par TheLastShot Voir le message
Si je comprends bien l'article, la solution la plus simple pour mettre le dawa c'est d'utiliser un plugin pour changer son user-agent et mettre n'importe quoi à la place, mais ça du coup c'est disponible depuis très longtemps sur plusieurs navigateur donc on peut le faire soi-même.
Le top est de prendre un user-agent de moteur de recherche Sa ouvre des portes.
0  0 

 
Contacter le responsable de la rubrique Développement Web

Partenaire : Hébergement Web