我想知道文件输入(<input type="file">
)元素向网站提供了哪些个人信息。
我注意到它确实显示了文件名,而且该网站似乎确实可以访问它。那么文件的路径呢?如果文件位于我的文档中,他们可以通过路径(例如C:\Documents and Settings\Bob\My Documents
)找到用户名,而该路径很多时候是使用该网站的实际用户的名称。
当用户使用文件输入元素时,大多数现代浏览器允许网站访问哪些信息?
能否以某种方式使用 JavaScript 来获取更多信息?
当插件(例如 Flash 或 Java)实现文件上传时会怎样?
答案1
有很多信息您的网络浏览器发送的请求,但文件输入元素仅提供文件名和文件内容。当您通过文件输入元素提交文件时,Web 浏览器请求的相关部分如下所示
内容处置:表单数据;名称=“f”;文件名=“file.txt” 内容类型:application/octet-stream
接下来是文件的实际内容。(注意:每个表单项都有一个姓名表格中指定的价值用户输入或选择的内容。在上面的请求中,文件输入元素f
在表单中具有名称。)
您说得对,文件名路径可能会告诉服务器一些有关您或您的计算机的信息,例如您的用户名或计算机上的文件夹名称。我在计算机上测试了 Web 浏览器,并注意到以下情况:
- Internet Explorer 7 发送文件的完整驱动器、路径和文件名。例如,“C:\folder\file.txt”。
- Chrome 4.0、Opera 10.01 和 Firefox 3.0 只发送文件名。例如,“file.txt”。
(顺便说一下,我用的是普罗克索米特龙我使用自己的计算机上的代理服务器来查看我的浏览器发送的请求。)
答案2
您可以使用WireShark查看到达服务器的数据包,并查看它发送的所有精彩信息。
这将向你展示
- 框架
- IP 报头
- TCP 报头
- HTTP 标头(向浏览器发出的任何请求中所有的 cookie、设置等都是标准的)
- FormData(以名称/值格式编码)
Key=Value&Key2=Value2&Key3=Value3
- 实际文件位于其正下方的一大块中
答案3
没有哪个主流浏览器会背着你发送任何东西,而且它们都严格限制 JavaScript 能够访问的内容。当 Flash 和 Java 出现时,一切都变得不可预测。