TrackJS 和 GDPR 和 SPA

Posted

技术标签:

【中文标题】TrackJS 和 GDPR 和 SPA【英文标题】:TrackJS and GDPR and SPA 【发布时间】:2020-02-05 10:03:03 【问题描述】:

我在 SPA 中使用 TrackJS,我有与 GDPR 相关的逻辑,所以在同意之前我不能发送任何数据。

我发现onError 配置选项对此有所帮助。 但我仍然对https://usage.trackjs.com/usage.gif 有外部请求。我可以通过一些技巧来禁用它,但它看起来不正确。

那么如何防止使用调用呢?

实现示例:

import  TrackJS  from 'trackjs';

let GLOBAL_VARIABLE_IS_CONSENT_GIVEN = false;

TrackJS.install(
  usageURL: '#', // disable usage call
  onError: function() 
    if (!GLOBAL_VARIABLE_IS_CONSENT_GIVEN) 
      return false;
    

    // other logic

    return true;
  ,
);

我还发现 SPA 中的使用调用存在问题。它不会显示实际的页面查看结果。所以支持手动调用使用请求会很好,它将解决上述两个问题。 发现已知限制:https://docs.trackjs.com/data-management/pageviews/

【问题讨论】:

【参考方案1】:

来自TrackJS front end error monitoring 的托德在这里。我认为您不需要缩短对 GDPR 的使用调用,因为它不包含任何特定于用户的数据。它只是一个给定应用程序已加载次数的计数器。

仅使用发送:

帐户令牌 我会申请 为唯一性生成的标识符

这些都不会追溯到用户,因此您应该能够继续并允许使用调用发生,并使用您描述的方法阻止错误在onError 中发送。

或者,我建议您推迟致电 TrackJS.install,直到获得同意后。这种方法的缺点是不会捕获在同意之前发生的错误。但我猜这就是用户想要的?

【讨论】:

延迟初始化不是我们的情况,因为我们可能会丢失所有客户的大部分错误,所以我们应该先初始化 TrackJS,否则它不会真正有用。我读到你的推特帖子twitter.com/trackjs/status/981971836010418184 说你符合 GDPR,但我们负责 GDPR 的法律人说“符合 GDPR 与必不可少”。对我来说,作为开发人员的最佳选择是扩展您的 API 以允许阻止您的使用调用。在这种情况下,我们将确保在同意之前不会发送“非必要”呼叫。有可能吗? 如果您手动添加对调用使用请求的支持,它将至少解决两个问题:GDPR 和 SPA 中的导航。 更新了问题描述【参考方案2】:

目前我只找到了一种解决方法。 我编写了辅助类,它应用猴子补丁来防止发送使用调用和错误跟踪,直到它允许为止。当您需要阻止加载外部脚本时,通常会使用 Monkey 补丁,例如我们已经使用的 iubenda。

助手类:

class TrackJSUtil 
  static URL_PATTERN = /usage\.trackjs\.com/;

  /**
   * Keep usage url
   *
   * @private
   * @type null|string
   */
  usageUrl = null;

  /**
   * Is requests allowed
   *
   * @private
   * @type boolean
   */
  isRequestsAllowed = false;

  /**
   * Apply monkey patch
   */
  install() 
    if (this.isRequestsAllowed) 
      return;
    

    const setUsageUrl = (value) => 
      this.usageUrl = value;
    ;

    const ignore = () => this.isRequestsAllowed || this.usageUrl != null;

    const createElementOriginal = document.createElement.bind(document);

    document.createElement = function createElementForTrackJS(...args) 
      const element = createElementOriginal(...args);

      if (ignore() || element.tagName.toUpperCase() !== 'IMG') 
        return element;
      

      Object.defineProperty(element, 'src', 
        get() 
          return this.getAttribute('src');
        ,
        set(value) 
          if (TrackJSUtil.URL_PATTERN.test(value)) 
            setUsageUrl(value);
           else 
            this.setAttribute('src', value);
          
        ,
      );

      return element;
    ;
  

  /**
   * Callback for onError in TrackJS
   * @return boolean
   */
  onTrackJSError() 
    return this.isRequestsAllowed;
  

  /**
   * Call it when requests are allowed
   */
  allow() 
    if (this.isRequestsAllowed) 
      return;
    

    this.isRequestsAllowed = true;

    if (this.usageUrl == null) 
      return;
    

    document.createElement('img').src = this.usageUrl;
  

用法:

import  TrackJS  from 'trackjs';

const util = new TrackJSUtil();

if (IS_CONSENT_GIVEN) 
  util.allow()
 else 
  callItWhenConsentGiven(() => 
    util.allow();
  );


util.install();

TrackJS.install(
  onError: () => util.onTrackJSError(),
);

【讨论】:

有趣的解决方案亚历山大!我会考虑将这样的内容包含在代理中。如果有一个 API 像:``` TrackJS.install( capture: false ); // 获得同意后 TrackJS.enable(); // 这将发送使用情况并刷新任何缓存的错误 ``` 嗨,托德,这会很棒。我很快就为它编写了样本和测试,如果它是你的意思,它将解决我们的 GDPR 问题。 github.com/utlime/trackjs 不要忘记内存,需要限制已保存错误的数量并清除引用以防止内存泄漏。 嘿@ToddGardner,只是为了确保您阅读了上面的评论。 谢谢亚历山大!这看起来是一个很好的解决方案,我们可能可以添加离线支持作为其中的一部分。我已将此添加到我们的待办事项中,我们会尽快制定计划。

以上是关于TrackJS 和 GDPR 和 SPA的主要内容,如果未能解决你的问题,请参考以下文章

GDPR 和个人信息保护的小知识

GDPR对ITSM的影响

GDPR合规_Exchange Online之eDiscovery Holds

GDPR如何影响中国企业?

GDPR - 分析:在任何跟踪之前用户同意?

「小邓观点」5步完成您的GDPR合规之旅