最新の(Chrome76以降)のシークレットモード検出方法
2020年1月現在、Chromeブラウザのシークレットモードは下記のJSで検出できる。ただし、問題点も残っている。
function detectSecretMode () {
if ('storage' in navigator && 'estimate' in navigator.storage) {
navigator.storage.estimate().then(function (estimate) {
var usage = estimate.usage;
var quota = estimate.quota;
if (quota < 120000000) {
console.log('Incognito');
} else {
console.log('Not Incognito')
}
});
} else {
console.log('Can not detect');
}
このシークレットモード検出方法は、ユーザーのストレージが少なすぎるなら、シークレットモードである
という仮定に基づいているが、この仮定は100%確実ではない。実際に自サイトで利用したところ、およそ一桁%の確率で誤検出が起きる。
これまでの誤検出状況を見る限り、写真等をたくさん保存するユーザーは、本当にストレージが少ないことがそれなりにある模様。
また、OSのバージョンが古い(Android4, 5, 6 等)ときも起きるようだが、ストレージ容量起因の誤検出と原因の分離ができていないためこちらは少し曖昧。
少し古い(Chrome76よりも前)シークレットモード検出方法
少し古いChromeでは、下記のJSでシークレットモードを検出できる。
function detectSecretMode () {
var fs = window.RequestFileSystem || window.webkitRequestFileSystem;
if (fs) {
fs(window.TEMPORARY,
100,
function (fs) {
console.log('Not Incognito');
},
function (fe) {
console.log('Incognito');
});
} else {
console.log('Can not detect');
}
}
参考リンク
「Chrome」のシークレットモードを検知できる手法、研究者が指摘
Bypassing anti-incognito detection in Google Chrome