【问题标题】:Is there a way to check if a user is connected to a site through Tor using JavaScript?有没有办法使用 JavaScript 检查用户是否通过 Tor 连接到网站?
【发布时间】:2015-11-29 03:28:32
【问题描述】:

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

【问题讨论】:

标签: javascript web connection tor


【解决方案1】:

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

  • performance.now()  (在 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;
    }
}

如果您不需要同步检查,您还可以添加 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(); };

【讨论】:

    【解决方案2】:

    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>
    

    要么把它放在&lt;head&gt; 标签中(会减慢页面加载时间),要么推迟加载它并在完成后检查值。

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

    我还计划尽可能长时间地保持该 URL 处于活动状态 - 但不保证可用性、可靠性或它会保持多年。

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

    【讨论】:

      猜你喜欢
      • 2011-05-03
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 2010-09-06
      相关资源
      最近更新 更多