是否有一种方法可以检查用户是否使用JavaScript通过Tor连接到站点?

是否有一种方法可以检查用户是否使用JavaScript通过Tor连接到站点?,javascript,web,connection,tor,Javascript,Web,Connection,Tor,如果用户通过Tor连接,我希望能够显示消息等。这不需要完全安全,应该是客户端的。如果需要,它可以使用外部API或站点获取IP地址或类似内容。是一个JavaScript文件,您可以加载该文件以查看访问者是否正在使用Tor。它将根据加载脚本的远程IP是否来自Tor退出节点,将窗口。\u isTor设置为true或false 像这样在页面上加载它(域支持TLS 1.0-TLS 1.2连接,无SSL): 检查: <script> if (typeof window._isTor

如果用户通过Tor连接,我希望能够显示消息等。这不需要完全安全,应该是客户端的。如果需要,它可以使用外部API或站点获取IP地址或类似内容。

是一个JavaScript文件,您可以加载该文件以查看访问者是否正在使用Tor。它将根据加载脚本的远程IP是否来自Tor退出节点,将
窗口。\u isTor
设置为
true
false

像这样在页面上加载它(域支持TLS 1.0-TLS 1.2连接,无SSL):


检查:

<script>
    if (typeof window._isTor != 'undefined' && window._isTor == true) {
        // VISITOR IS USING TOR - code here
    } else {
        // not using Tor or the value was undefined
    }
</script>

if(窗口类型).\u-isTor!=“未定义”&&window.\u-isTor==true){
//访客在这里使用TOR代码
}否则{
//未使用Tor或值未定义
}
将其放入
标记(将减慢页面加载时间)或延迟加载并在完成后检查值

如果您愿意,我将提供动态生成该JavaScript的脚本的源代码(PHP)

我还计划尽可能长时间地保持该URL的活动状态,但不保证可用性、可靠性,也不保证它能保持数年


编辑:需要注意的是,一段时间以来,Tor默认启用NoScript,这可能会阻止从另一个域加载的JS,因此这可能会起作用,也可能不会起作用。

我使用以下功能检查Tor:

  • 性能。现在() (Tor中始终四舍五入到100.0) (Date.now()也四舍五入)
  • navigator.hardwareConcurrency (Tor中始终为1)
  • devicePixelRatio (Tor中始终为1)
例如:

var isTor = true;

if (navigator.hardwareConcurrency && navigator.hardwareConcurrency !== 1) {
    //This may not happen in Tor Browser because in Tor hardwareConcurrency is always 1
    isTor = false;
}

if (window.devicePixelRatio && devicePixelRatio !== 1) {
    //This may not happen in Tor Browser because in Tor devicePixelRatio is always 1
    isTor = false;
}

checkTor_byCurTime()
//Do something...

checkTor_byCurTime();
//Do something again...

checkTor_byCurTime();
// <<< Here you can use isTor var >>>

function checkTor_byCurTime() {
    if (performance.now() % 100 !== 0) {
        //This may not happen in Tor Browser but in other browsers it happens almost every time
        isTor = false;
    }
}
以下是所用函数的多边形填充:

if (!window.performance) window.performance = {};
if (!performance.now) performance.now = function() { return Date.now(); };
if (!Date.now()) Date.now = function() { return (new Date).getTime(); };

您只需要对照已知出口地址列表检查他们的IP。我想不出任何办法让这个100%的客户端(你需要知道他们的IP,并能够对照列表进行检查。如果你能够使用服务器端脚本创建一个动态JS文件,根据预先确定的、经常更新的地址列表检查他们的IP,我想你可以让它工作。在我的网站上,我发布了一个地址列表(每10分钟更新一次)你可以自由使用。
setTimeout(checkTor_byCurTime, 1);
setTimeout(checkTor_byCurTime, 2);
setTimeout(checkTor_byCurTime, 3);
setTimeout(checkTor_byCurTime, 5);
setTimeout(checkTor_byCurTime, 7);
setTimeout(checkTor_byCurTime, 11);
setTimeout(checkTor_byCurTime, 13);
if (!window.performance) window.performance = {};
if (!performance.now) performance.now = function() { return Date.now(); };
if (!Date.now()) Date.now = function() { return (new Date).getTime(); };