Web 应用程序访问用户的文件系统

Posted

技术标签:

【中文标题】Web 应用程序访问用户的文件系统【英文标题】:Web application access user's file system 【发布时间】:2016-02-18 05:14:36 【问题描述】:

我正在为我的客户创建一个 Web 应用程序。该应用程序将安装在公司网络内的专用服务器上。 他想在网页上查看他的本地文件列表(来自他的本地 PC)。他的意思是任何访问者都可以从某个文件夹中看到他的本地文件列表。

我知道该网络应用程序无法访问访问者的文件系统。浏览器通过设计限制了这一点。 当然,可能会有一些浏览器扩展、小程序和 Flash 应用程序,甚至是黑客攻击。但事实并非如此。

但是我该如何向他解释呢?他将我指向“另存为”或“加载文件”对话框,并说其他应用程序可以做到这一点。我不知道怎么解释他,这只是浏览器的交互。

我试图用谷歌搜索一些证明的链接,但找不到很快的东西。

你们能给我一些描述无法从 Web 应用程序访问用户文件夹的文档的链接吗?

【问题讨论】:

有趣的是,看起来确实没有高度可见的权威材料来支持这个众所周知的限制!当然,有很多解决方法,具体取决于您的客户端允许您执行/安装的操作。他可能会在看到一些用于在线文件访问的 NAS 功能后提出要求。如果这对你有帮助,我只能拿出书籍和小文本:help.adobe.com/en_US/air/security/… 和 books.google.com/… 【参考方案1】:

最后我整理了一些语录,完成了..

https://en.wikipedia.org/wiki/javascript#Security

脚本在沙盒中运行,它们只能在其中执行与 Web 相关的操作 操作,而不是像创建文件这样的通用编程任务

https://www.us-cert.gov/publications/securing-your-web-browser

JavaScript,也称为 ECMAScript,是一种脚本语言,用于使网站更具交互性。 JavaScript 标准中有一些规范限制了某些功能,例如访问本地文件。

https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Introduction#restrictions

由于文件系统是沙盒化的,因此 Web 应用无法访问其他应用的文件。您也无法读取或写入文件到用户硬盘上的任意文件夹(例如,我的图片和我的文档)。

【讨论】:

【参考方案2】:

Mozilla. File System API Restrictions

因为文件系统是沙盒的,一个网络应用程序不能访问另一个 应用程序的文件。您也不能读取或写入文件到任意 用户硬盘上的文件夹(例如,我的图片和我的文档) 开车。

【讨论】:

【参考方案3】:

也许这份文件很震撼?

http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#security-considerations

第 4.1 节

应用程序可以请求临时或永久存储空间。临时存储可能更容易获得,由 UA 酌情决定 [更宽松的配额限制,无需提示用户即可使用],但存储在那里的数据可能会在 UA 方便时被删除,例如处理磁盘空间不足的问题。

相反,一旦授予持久存储,应用程序存储在那里的数据不应在没有用户干预的情况下由 UA 删除。应用程序当然可以随意删除它。 UA 应该在向应用授予持久存储空间之前需要用户的许可。

此 API 指定文件系统上下文中的标准源隔离,以及跨调用的数据持久性。应用程序可能会使用临时存储进行缓存,如果它仍然存在于上一个会话中,它通常很有用。另一方面,如果您在下次调用时无法再次访问持久数据,那么它就毫无用处。然而,即使是持久性数据也可以由用户手动删除[通过 UA 或通过直接文件系统操作]。

【讨论】:

【参考方案4】:

如果与客户端-服务器模型争论呢? 您向服务器发送请求(网站请求、文件或其他),网络服务器可以响应。 服务器上没有直接的文件系统访问(介于两者之间的网络服务器),客户端可以选择他发送到服务器的内容(浏览器中的文件选择器对话框)。

【讨论】:

没办法。您可以打开sumopaint.com 在线应用程序,它有“从我的电脑打开”菜单项。单击它,您可以看到本地文件的列表,甚至可以看到已安装的驱动器。所以 - 魔术 - 它可以访问文件。 :( 不,客户端 - 用户 - 想要将在此对话中选择的内容从浏览器准确发送到服务器。他是客户,他可以选择发送的内容。 天啊,我打开了很多网站的文件对话框。所以现在他们都知道我的电脑上有什么文件了。 文件对话框 在客户端机器上打开,服务器甚至不知道是否有人打开了该对话框。即使您在页面上的脚本也无法知道对话框中显示了哪些文件。它只能访问用户选择上传的文件。 你知道的。我知道。但我需要证明链接给他看:) 好吧,最后一试,那我就放弃了:他为什么认为对话是从服务器打开的???让他保存网站的 html 并断开任何网络连接,然后让他再次单击那个该死的文件选择器按钮。【参考方案5】:

下面的 html 允许我查看本地文件列表。

<!DOCTYPE html>
<html>
<body>

<p>Click on the "Choose File" button to upload a file:</p>

<form action="/action_page.php">
  <input type="file" id="myFile" name="filename">
  <input type="submit">
</form>

</body>
</html>

【讨论】:

它没有。您不能在页面上列出访问者的文件。页面的 javascript 代码无权访问文件列表。 它对我有用,W3Schools 似乎也同意:w3schools.com/tags/att_input_type_file.asp 不,不是这个意思。网页 (javascript) 无权访问文件系统。选择文件的弹出对话框是用户选择文件并上传的唯一方法。只有在此之后,该内容才能用于页面。您可以阅读以上答案中的链接了解详细信息。 对不起,@baldr,但当我使用上述 HTML 时,我确实可以看到本地文件列表。我没有声称可以“在页面上列出访问者的文件”。我同意我没有在我的浏览器中看到它们。我同意该列表不在网页中。我也同意浏览器无法访问本地文件系统,而不仅仅是表单中的文件输入类型。 这就是我最初的问题。客户希望在打开远程网页时查看他的本地文件。我声明目前这是不可能的。我声明你的答案是错误的,它可能会让那些可能也在寻找答案的人感到困惑。如果可以的话,我会再写一次。

以上是关于Web 应用程序访问用户的文件系统的主要内容,如果未能解决你的问题,请参考以下文章

如何从现有的 Web 应用程序访问 HDFS(Hadoop 文件系统)

如果通过双击 JNLP 文件启动 JAVA Web Start 应用程序,如何允许它访问 macOS Catalina 上的文件系统?

干货 | 玩转云文件存储——利用CFS实现web应用的共享访问

Tomcat:限制java web服务访问主机文件系统

用于可以执行和扩展的多用户 Web 应用程序的基于文件系统的 Sql 数据库的选项[关闭]

如何在域控制器上分配 IIS 7.5 文件系统访问权限?