Explorar el Código

feat: 生成浏览器指纹用于追踪用户

zhangyuhan hace 2 años
padre
commit
6d48ad5b51

+ 1 - 0
src/web/staticres/common-module/public/js/automatic-id.min.js

@@ -0,0 +1 @@
+"use strict";!function(){function n(){try{var n=function(n){for(var t=Array.from(n),r=t.length,e=[],i=3;i<r;i+=4)e.push(i);for(var o=0;o<Math.floor(e.length/2);o++)var a=e[o],c=e[e.length-1-o][(t[a],t[c])]=[t[c],t[a]];return t.join("")},t=function(n,t,r){var e="";if(r){var i=new Date;i.setTime(i.getTime()+24*r*60*60*1e3),e="; expires="+i.toUTCString()}document.cookie=n+"="+t+e+"; path=/"};FingerprintJS&&FingerprintJS.load().then(function(r){r.get().then(function(r){var e=r.visitorId;t("fid",e,30);var i=new JSEncrypt;i.setPublicKey(n("MIGBMA0DCSq0SIbiDQEVAQU3A4G3ADC3iQKPgQDwTNKoTnxMogaErZ746YQB0Xm50YkUBbn/pw9hG4yJXS3f3lY9prGkB7GLklV/+q6/x8lYPt8912JT/59Gf0P9j41cQN9hk7TsDAxjEkd3zG5NLn0ubdkN5X7hQxUpAcs/j+3nHdAThHboV+cBCYnBPVWNncGAqZQBsg33y6oGYwIGAQAf"));var o=i.encrypt(e);t("eid",o,30)})})}catch(n){console.warn(n)}}window.addEventListener("load",n)}();

+ 55 - 0
src/web/staticres/common-module/public/js/automatic-id.origin.js

@@ -0,0 +1,55 @@
+;(function(){
+  function initFTCookies () {
+    try {
+      // 已使用 obfuscateKey 加密 Key
+      var publicKey = `MIGBMA0DCSq0SIbiDQEVAQU3A4G3ADC3iQKPgQDwTNKoTnxMogaErZ746YQB0Xm50YkUBbn/pw9hG4yJXS3f3lY9prGkB7GLklV/+q6/x8lYPt8912JT/59Gf0P9j41cQN9hk7TsDAxjEkd3zG5NLn0ubdkN5X7hQxUpAcs/j+3nHdAThHboV+cBCYnBPVWNncGAqZQBsg33y6oGYwIGAQAf`
+
+      function obfuscateKey(key) {
+        const keyArray = Array.from(key)
+        const length = keyArray.length
+        const indices = []
+        for (let i = 3; i < length; i += 4) {
+          indices.push(i)
+        }
+
+        for (let i = 0; i < Math.floor(indices.length / 2); i++) {
+          const forwardIndex = indices[i]
+          const backwardIndex = indices[indices.length - 1 - i]
+            [keyArray[forwardIndex], keyArray[backwardIndex]] = [keyArray[backwardIndex], keyArray[forwardIndex]]
+        }
+
+        const obfuscatedKey = keyArray.join('')
+        return obfuscatedKey
+      }
+
+      function setCookie(name, value, days) {
+        var expires = ""
+
+        if (days) {
+          var date = new Date()
+          date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000))
+          expires = "; expires=" + date.toUTCString()
+        }
+
+        document.cookie = name + "=" + value + expires + "; path=/"
+      }
+
+      if (FingerprintJS) {
+        FingerprintJS.load().then(function (fp) {
+          fp.get().then(function (result) {
+            var visitorId = result.visitorId
+            setCookie('fid', visitorId, 30)
+
+            var encrypt = new JSEncrypt()
+            encrypt.setPublicKey(obfuscateKey(publicKey))
+            var encryptedFid = encrypt.encrypt(visitorId)
+            setCookie('eid', encryptedFid, 30)
+          })
+        })
+      }
+    } catch (e) {
+      console.warn(e)
+    }
+  }
+  window.addEventListener('load', initFTCookies)
+})();

+ 4 - 0
src/web/templates/common/pcbottom.html

@@ -193,3 +193,7 @@ if(ADList.length>0){
 </script>
 
 <script src='{{Msg "seo" "cdn"}}/public-pc/js/pc-bottom.js?v={{Msg "seo" "version"}}'></script>
+<!--用于生成加密UID-->
+<script defer src='https://cdn-common.jianyu360.com/cdn/lib/crypto/4.1.1/crypto-js.min.js'></script>
+<script defer src='https://cdn-common.jianyu360.com/cdn/lib/fid-sdk/v4/fid.js'></script>
+<script defer src='{{Msg "seo" "cdn"}}/common-module/public/js/automatic-id.min.js?v={{Msg "seo" "version"}}'></script>