当前位置: 首页 > 科技观察

涨知识,原来可以这样用CSS来跟踪用户

时间:2023-03-21 20:43:20 科技观察

除了用JS来跟踪用户,现在有人提出CSS也可以用于网页跟踪分析。译者认为这种方法更优雅,更简洁,而且不容易屏蔽,值得一试,想要了解更多,可以查看仓库地址(https://github.com/jbtronics/CrookedStyleSheets)和demo(http://crookedss.bplaced.net/)我们可以用它来做什么我们可以收集一些关于用户的基本信息,比如屏幕分辨率(当浏览器优化时)和用户使用的浏览器(引擎)此外,我们可以监控用户是否点击了某个链接或将鼠标悬停在某个元素上,用于跟踪用户将鼠标悬停在哪些链接上,甚至可以跟踪用户如何移动鼠标(使用页面上的不可见字段),但是,用我现在的方法我只能跟踪用户的第一次点击或者悬停,我相信,修改我的方法最终可以跟踪用户的每一次点击***,我们还可以监控用户是否安装了特定的字体,基于此信息,我们可以跟踪用户使用的操作系统,因为使用的字体不同的操作系统也略有不同,比如CalibriforWindows。这是如何实施的?在CSS中,可以使用url("foo.bar")属性引用外部资源来添加图片。有趣的是,此资源仅在需要时加载(例如,单击链接时)因此,我们可以使用CSS创建一个选择器,当用户单击链接时调用特定的UPL#link2:active::after{content:url('track.php?action=link2_clicked');}在服务器端,php脚本会在调用URL时保存时间戳。浏览器监控浏览器监控是基于@supportsMedia-Query,我们可以监控浏览器的一些特殊属性比如-webkit-appearance@supports(-webkit-appearance:none){#chrome_detect::after{content:url('track.php?action=browser_chrome');}}字体监控对于字体监控,需要定义一个新字体。如果字体存在,文本将尝试使用该字体进行样式设置。但是,当用户在系统上找不到字体时,定义的字体作为回退,在这种情况下,浏览器将尝试加载定义的字体并调用服务器上的跟踪脚本/**Fontdetection**/@font-face{font-family:Font1;src:url('track.php?action=font1');}#font_detection1{font-family:Calibri,Font1;}Hoverdetection对于悬停检测(基于jeyroik的思路),我们需要定义一个关键帧,每次使用这个关键帧去请求一个URL@keyframespulsate{0%{background-image:url('track.php?duration=00');}20%{background-image:url('track.php?duration=20');}40%{background-图片:url('track.php?duration=40');}60%{background-image:url('track.php?duration=60');}80%{background-image:url('track.php?duration=80');}100%{background-image:url('track.php?duration=100');}}然后我们用定义的关键帧创建动画,我们可以定义动画持续时间,这也是我们测量的最佳时间#duration:hover::after{-moz-animation:pulsate5sinfinite;-webkit-animation:pulsate5sinfinite;/*animation:pulsate5sinfinite;*/animation-name:pulsate;animation-duration:10s;content:url('track.php?duration=-1');}我们可以通过补充关键帧设置来优化分辨率监控。可以使用CSS提供的:selected选择器#checkbox:checked{content:url('track.php?action=checkbox');}为了监听字符串,我们结合HTML模式属性,可以帮助我们解决一些基本的输入验证,结合:valid选择器,当输入匹配成功时,浏览器会请求我们的跟踪站点#text_input:valid{background:green;background-image:url('track.php?action=text_input');}Demo点这里(http://crookedss.bplaced.net/)可以查看一个实现上述方法的仓库的demoindex.html,访问results.php查看结果。如果属性后面没有内容或者php警告,说明这个属性的值为false或者用户没有访问页面或者链接(这个,真烦人,不过可以理解一下这些方法)另外,分辨率监控不是特别准确,因为目前只能监控最常用的屏幕宽度。***我还想说,监控用户实际屏幕的宽度并没有想象的那么简单,因为CSS监控的高度是浏览器窗口的高度,而且通常由于系统面板/任务栏,浏览器窗口如果小于显示器,是否有任何方法可以防止使用上述方法进行跟踪?到目前为止我知道的唯一方法是完全禁用CSS(您可以使用像uMatrix这样的插件来实现此目的),但它也非常昂贵。如果没有CSS,网页将不像以前那样赏心悦目,甚至无法使用,因此禁用CSS并不是一个真正的选择,除非,你真的很关心你的隐私(例如,当你使用TorBrowser,maybeyoushoulddisableCSS)a更好的解决方案是在加载网页时,浏览器不会加载所需的外部资源,这样就无法监控用户的个人行为。这种对内容加载的修改可以通过浏览器实现,也可以通过插件实现(类似NoScript或uMatrix)。上面的方法还有一个明显的问题,就是会对性能有一定的影响,因为浏览器在初始化页面的时候会加载大量的内容(有些内容是页面根本不需要的)