有没有办法检查用户是否通过Tor使用JavaScript连接到网站?

时间:2015-11-29 03:28:33

标签: javascript web connection tor

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

2 个答案:

答案 0 :(得分:2)

我使用此功能检查Tor的概率:

  • performance.now()(在Tor中总是舍入到100.0)(Date.now()也是舍入的)
  • navigator.hardwareConcurrency(总是1 in Tor)
  • 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;
    }
}

如果您不需要同步检查,还可以添加setTimeout调用:

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);

以下是使用函数的polyfill:

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

答案 1 :(得分:1)

Here是一个JavaScript文件,您可以加载该文件以查看访问者是否正在使用Tor。它会将window._isTor设置为truefalse,具体取决于加载脚本的远程IP是否来自Tor出口节点。

将其加载到您的页面上(域支持TLS 1.0 - TLS 1.2连接,无SSL):

<script src="//openinternet.io/tor/istor.js"></script>

检查:

<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>

将其放入<head>标签(会减慢页面加载时间)或推迟加载并在完成后检查值。

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

我还计划尽可能长时间保持该网址的有效性 - 但不保证可用性,可靠性,或者它会保持多年。

编辑:应该注意的是,有一段时间Tor现在默认启用NoScript,这可能会阻止从另一个域加载的JS,所以这可能会也可能不起作用。