Ste*_*eve 64 html javascript browser security cookies
我正在为一家关于安全问题的公司建立一个外联网.他们希望确保其用户正在浏览网站,并在其网络浏览器中启用私人浏览模式,以便不保留任何Cookie或历史记录.
我发现只有这个 http://jeremiahgrossman.blogspot.com/2009/03/detecting-private-browsing-mode.html 和 https://serverfault.com/questions/18966/force-safari-to-operate-in-私人模式和检测,该状态-从-A-Web服务器
理想的解决方案是使用no或minimal javascript.试图为所有浏览器和平台设置一个独特的cookie吗?有人这样做过吗?
谢谢!
更新
http://crypto.stanford.edu/~collinj/research/incognito/使用其他海报提到的浏览器fingerprinters的CSS访问技术 - 感谢提示.
我喜欢它,因为它小而优雅,但仍然希望能够在没有javascript的情况下做到这一点,如果可能的话.
Dwa*_*ton 53
对于遇到此问题的其他人,请注意截至2014年,没有可靠或准确的方法来检测是否有人通过Javascript或CSS在隐身/私人/安全浏览模式下浏览.曾经像CSS历史黑客一样工作的以前的解决方案已被所有浏览器供应商所使用.
永远不应该存在需要在正常的日常网站上检测隐私浏览模式的情况.由于自身原因,人们选择匿名浏览或不匿名浏览.
Chrome和Firefox等浏览器不再禁用localStorage等功能.他们只是将其命名为临时位置,以防止使用它的网站出错.完成浏览后,命名空间将被删除,并且不会保存任何内容.如果您正在测试localStorage支持而不管模式如何,对于支持它的浏览器,它将始终返回true.
如果公司需要内部,您应该开发一个浏览器插件.Chrome和Firefox特别公开内部API,允许插件检查用户是否处于隐私浏览/隐身模式并相应地执行操作.它不能在插件之外完成.
如果公司正在做决定并且这很重要,那么只需检查您是否处于私密/隐身模式并且阻止您浏览直到开启的插件对于任何了解一点Javascript的开发人员来说都应该是一个简单的壮举.然后,您会要求所有公司员工安装此插件.
Jez*_*z D 40
这是一种更简单的方法来检测隐私模式.这仅适用于Safari.我创建它是因为我正在开发的Web应用程序使用localStorage.在隐私模式下,Safari中不提供LocalStorage,因此我的应用程序将无法运行.在页面加载时,运行下面的脚本.如果我们不能使用localStorage,它会显示一个警告框.
try {
// try to use localStorage
localStorage.test = 2;
} catch (e) {
// there was an error so...
alert('You are in Privacy Mode\nPlease deactivate Privacy Mode and then reload the page.');
}
Run Code Online (Sandbox Code Playgroud)
man*_*niL 23
可以检测大多数使用过的浏览器的启用隐私浏览模式.这包括Safari,Firefox,IE10,Edge和谷歌浏览器.
启用Firefox的隐私浏览模式时,IndexedDB会抛出InvalidStateError,因为它在隐私浏览模式下不可用.
如果那样:
var db = indexedDB.open("test");
db.onerror = function(){/*Firefox PB enabled*/};
db.onsuccess =function(){/*Not enabled*/};
Run Code Online (Sandbox Code Playgroud)
对于Safari,关键是本地存储服务.它在隐私模式下被禁用.因此,尝试访问它并使用try-catch子句.以下方法适用于OSX和iOS设备.这种方法的功劳正在回答这个问题
var storage = window.sessionStorage;
try {
storage.setItem("someKeyHere", "test");
storage.removeItem("someKeyHere");
} catch (e) {
if (e.code === DOMException.QUOTA_EXCEEDED_ERR && storage.length === 0) {
//Private here
}
}
Run Code Online (Sandbox Code Playgroud)
Internet Explore甚至会在隐私模式下禁用IndexedDB.所以检查是否存在.但这还不够,因为旧浏览器可能甚至没有IDB.所以做另一个检查,例如,对于只有IE10和后续浏览器具有/触发的事件.有关CodeReview的相关问题,请点击此处
if(!window.indexedDB && (window.PointerEvent || window.MSPointerEvent)){
//Privacy Mode
}
Run Code Online (Sandbox Code Playgroud)
Chromes Incognito模式可以通过文件系统进行验证.可以在SO上找到一个很好的解释
var fs = window.RequestFileSystem || window.webkitRequestFileSystem;
if (!fs) {
console.log("FS check failed..");
return;
}
fs(window.TEMPORARY, 100, function (fs) {}, function (err) {
//Incognito mode
});
Run Code Online (Sandbox Code Playgroud)
End*_*ess 16
这是我对检测私人模式的看法
function detectPrivateMode(cb) {
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) {
// 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();
}
}
// Blink (chrome & opera)
window.webkitRequestFileSystem ? webkitRequestFileSystem(0, 0, off, on)
// FF
: "MozAppearance" in document.documentElement.style ? (db = indexedDB.open("test"), db.onerror = on, db.onsuccess = off)
// Safari
: /constructor/i.test(window.HTMLElement) || window.safari ? tryls()
// IE10+ & edge
: !window.indexedDB && (window.PointerEvent || window.MSPointerEvent) ? on()
// Rest
: off()
}
detectPrivateMode(function (isPrivateMode) {
console.log('is private mode: ' + isPrivateMode)
})
Run Code Online (Sandbox Code Playgroud)
编辑发现一个现代的,更快的,synkronas方式在firefox中尝试它(他们没有在privat模式下的服务工作者)类似于不包括indexedDB
: "MozAppearance" in document.documentElement.style ? navigator.serviceWorker ? off() : on()
Run Code Online (Sandbox Code Playgroud)
Mat*_*t S 14
您的网页无法确切地知道用户处于隐私浏览模式.在更新安全实施时,任何检查各种浏览器功能的尝试都需要经常更改.它可能在某些浏览器中工作一段时间,但不是全部.
如果该公司担心安全性,我建议使用锁定的隐私设置来滚动您自己的Firefox或Chromium发行版,并且只允许该自定义客户端连接到Extranet.
小智 6
许多人似乎认为不再可能检测隐身/私人模式,我可以向您保证这绝对不是真的。我一直无法找到任何可在 100% 浏览器上运行的公开可用代码,因此我编写了自己的代码。
截至 2021 年 10 月,我的代码能够检测 Safari 15(macOS 和 iOS)、Chrome 93、Edge 93、Firefox 93、Internet Explorer 10+ 以及 Brave 上的隐私浏览模式。
我还应该注意到,检测隐身具有合法的、非付费专区相关的用途,我将其用作更大的私人项目的一部分。例如,诈骗者在进行信用卡诈骗时经常使用隐身方式。虽然单独以隐身方式填写结账表格的人不会立即尖叫欺诈,但与其他数据点(例如也使用 VPN 的用户)配对,我会对接受这样的订单持谨慎态度。
根据用户是否处于隐身状态来阻止访问的网站很糟糕,但我将其更多地归咎于糟糕的网站设计。
无耻插件:https://github.com/Joe12387/detectIncognito
我还有一个可用的演示: https: //detectincognito.com/
我希望这是有帮助的。
我建立了一个小库,该库将在我测试过的所有主要平台和浏览器上运行:https : //github.com/jLynx/PrivateWindowCheck
您可以简单地致电
isPrivateWindow(function(is_private) {
if(is_private)
alert('Private');
else
alert('Not Private');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71131 次 |
| 最近记录: |