| 关键词: 文件 nbsp 安全 内容 JavaScript API 但是 用户 文本 一些 |
转自:大风起兮云飞扬 本来要下班了,但是看到这个令人震惊的消息,不得不上来写今天的第三篇blog新 API 寻求让 JavaScript 操作本地文件 新闻原文:http://arstechnica.com/open-source/news/2009/11/w3c-publishes-draft-of-new-file-api-spec.ars引用自cnbeta的新闻:FileReader 对象并不需要特别的权限,但出于显然的安全考虑,直接使用文件路径进行访问是不允许的,必须结合常规的 HTML file 对象,用户点击浏览之后,选择本地文件,JavaScript 再通过 DOM 引用该文件并进行操作,这个机制使得该 API 相对安全一些,因为任何本地文件的获取都需要用户的人工参与。以下例子使用该 API 打开一个本地文件并将文件内容显示在一个 div 容器中,我们甚至可以在 div 上加上 contentEditable 属性,用户可以直接编辑文件的内容,不过,该 API 并没有提供将文件内容写回本地文件的方法,因此你编辑的内容无法保存。 <html><head><style>#editor {border: 1px solid black;height: 250px;margin: 15px;padding: 10px;overflow: scroll;}</style><script type="text/javascript">function load() {var finput = document.getElementById("data");var editor = document.getElementById("editor");var f = finput.files[0];if (f) {var r = new FileReader();r.onload = function(e) { editor.innerHTML = e.target.result }r.readAsText(f);} else { editor.innerHTML = "Failed to load file" }}function format(c) { document.execCommand(c, false, false); }</script></head><body><h3>HTML File Reader Test</h3><p>Select a file:<input type="file" id="data" /><a href="#" onclick="load()">Load</a></p><p><a href="#" onclick="format('bold')">Bold</a><a href="#" onclick="format('italic')">Italic</a><a href="#" onclick="format('underline')">Underline</a></p><div id="editor" contentEditable="true"></div></body></html>注意上面我加粗的部分,这段API有两个特点:1. 每一步都有用户参与2. 只能读,不能写这样设计都是出于安全的考虑,但是我需要说的是,仅仅这样做是远远不够的!我相信出于安全考虑,在读文件的时候还会禁止读一些操作系统文件内容,或者是只允许读某些目录下的文件内容,但是黑客总能找到各种方法去把风险放大到极限。之前就曾经出过利用html和javascript遍历目录、文件的漏洞(还有尚未公布的),也曾经出过仅利用javascript就能偷偷把文件上传到黑客网站的漏洞(已经patch的)。但是这个新的操作文件的API一出来,无疑将提供新的 attack surface。而浏览器安全模型的一个重要思想------ 隔离, 不论是sandbox,还是别的什么技术,都会因此受到挑战。我闭上眼睛,就想到了各种shellcode利用javascript API操作本地文件,想到了各种XSS trick,想到了clickjacking可能诱使用户错误的点击、选择文件,然后把文件偷走。。。。。。。。当然,新的功能能够给应用带来更多的优点,我们应该鼓励创新,但是在创新的同时,一定要好好做安全,否则就会成为悲剧。今天还看到个文章,里面讲到 IE6 是有史以来造成最大、最多安全问题的软件。IE6 好吗?在当时来说当然好,但是由于当时对安全认识的不足,还是付出了很惨重的代价。再次强调,我并非反对这个API,而是强调安全是使用的前提,在安全的基础上,才能更好的使用这个特性。(最近有些人看我文章老是不认真看完,然后断章取义的发表一些不恰当的看法,所以我不得不多强调几次我的观点。) 我这里也提供点JS操作本地文件的代码给大家参考吧。By:Idiot.CN 写入文本文件 <html> <head> <title>写入文本文件</title> </head> <body> <h2>写入文本文件</h2> <hr> <script language="JavaScript"> var ForWriting = 2; var strFile = "E:\HackNote.html"; var objFSO = new ActiveXObject("Scripting.FileSystemObject"); // 检查文件是否存在 if (objFSO.FileExists(strFile)){ // 打开文本文件 var objStream = objFSO.OpenTextFile(strFile,ForWriting,true,false); // 写入字符串数据 objStream.WriteLine("1111111111"); objStream.WriteLine("22222222222222"); document.write("写入文本文件" + strFile + "成功<br>"); objStream.Close(); // 关闭文件 } else document.write("文本文件: " + strFile + "不存在<br>"); </script> </body> </html> JS写入文件内容 <SCRIPT LANGUAGE="JavaScript"> <!-- var fso, f; fso = new ActiveXObject("Scripting.FileSystemObject"); f = fso.CreateTextFile(server.mappath("hack.txt"),true) ; f.WriteLine('Hacked by:Idiot.CN,\r\nTeam:http://hacknote.com'); f.Close(); // --> </SCRIPT> 下面的这个是我以前做的示例,忘记删了。功能是读取网页代码和本地文件。 http://hacknote.com/id.html |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|