从“为什么不能直接打开PDF文件”说到“脚本攻击”

简介:

先从一个简单的问题说起。

前两天在网上,有网友问我这样一个问题:“上载到SharePoint 2010文档库中的一个PDF文件,当直接点击此文件链接时,为什么浏览器弹出的对话框只有保存,而没有打开?”

image

就像上面的截图所显示的,在浏览器弹出的对话框上,只能让用户保存(Save)的选项,而没有一个打开(Open)的选项。但可能有人会记得,以前SharePoint 2007的时候,并不是这样的。用户直接点击一个存放在SharePoint 2007文档库里面的PDF文件时,浏览器会提示用户,可以直接打开它,然后本地安装的PDF Reader就会直接打开这个PDF文件,开始阅读。

先说解决这个问题的方法。打开SharePoint 2010管理中心,管理Web应用程序,选择一个Web应用程序,点击Ribbon区域的“常规设置”,然后在弹出的设置对话框中,将“浏览器文件处理程序”这个设置项从默认的“严格”,修改为“许可”。

image

搞定!你会发现修改了这个设置之后,浏览器会重新显示出“打开”选项,让用户可以直接打开PDF文件。

好了,如果你只是想解决这个问题,可以不用继续往下阅读了。

嗯,想知道为什么?好吧,这就是原因。重新将Web应用程序常规设置中的“浏览器文件处理程序”设置项改回默认的“严格”。打开文档库,这次在点击PDF文件链接之前,打开浏览器的Developer Tools(在IE浏览器中是通过F12打开它,下面将使用IE浏览器做例子,FireFox和Chrome也有各自的类似工具可以使用)。在“Network”选项卡中点击“Start capturing”按钮,它会捕获当前浏览器窗口与服务器之间的所有网络通信。然后,点击那个PDF文件链接。

image

在“Network”选项卡里面,找到用户点击PDF链接时所产生的网络请求,双击它,就可以看到这次请求的所有详细的Request和Response信息。点击“Response headers”选项卡,就可以看到从SharePoint 2010服务器所返回的HTTP头信息。嗯,如下图所示,你会看到一个有趣的头信息,“X-Download-Options = noopen”。

image

就是这个HTTP头信息,告诉浏览器:“不要直接打开这个文件,不要给用户显示出打开选项!”

当我们在SharePoint 2010管理中心里面,将Web应用程序的“浏览器文件处理程序”设置项从默认的“严格”修改为“许可”时,SharePoint 2010服务器就会停止在HTTP头里面添加这个头信息,于是,浏览器又会允许用户直接打开文件了。

SharePoint 2010默认会禁止浏览器直接打开所有存放在文档库中的任何文件,方法就是向返回给浏览器的HTTP头信息中添加那个额外的metadata。为什么当用户点击Office文档的时候,仍然会自动打开本地的Office程序,打开Office文档呢?这其实是因为页面上的脚本会调用OpenDocuments这个ActiveX控件,由它来启动客户端的Office程序,打开Office文档。

SharePoint 2010为什么这么做?原因就是为了更好的安全性。由于SharePoint通常会允许非网站管理员上载文件到文档库里面,所以让浏览器随便打开这些用户上载的文件,实际上是一件非常危险的事情。在最严重的情况下,这会给恶意用户提供实施脚本攻击的漏洞,甚至引发跨站点脚本攻击。比如,一个仅仅具备Contributor(参与讨论)角色的用户,可能会上载一个扩展名是.docx,但实际上确实一个含有恶意脚本的.html文件,到文档库中。当管理员尝试打开这个“Word文档”时,浏览器可能会尝试直接打开它,并无意中运行那个文件中所包含的脚本。

当然,除了禁止用户直接在浏览器中打开文档库中的文件之外,SharePoint 2010还在网站的安全性上做了其他一些增强。比如,Contributor现在不能直接上载一个页面文件到Pages(页面)库中,而只能通过Pages库内置的“创建页面”功能,来新建页面。又比如,通过在web.config的<SaveControl>节点中添加“SafeAgainstScript”和“RequiresDesignerPermission”属性,系统管理员可以禁止Contributor修改Web部件的属性。当然,这些又是另外一个话题了。





本文转自 kaneb0y 51CTO博客,原文链接:http://blog.51cto.com/kaneboy/566684,如需转载请自行联系原作者

目录
相关文章
|
10月前
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
7月前
|
C#
【PDF提取内容改名】批量提取PDF指定区域内容重命名PDF文件,PDF自动提取内容命名的方案和详细步骤
本工具可批量提取PDF中的合同编号、日期、发票号等关键信息,支持PDF自定义区域提取并自动重命名文件,适用于合同管理、发票处理、文档归档和数据录入场景。基于iTextSharp库实现,提供完整代码示例与百度、腾讯网盘下载链接,助力高效处理PDF文档。
937 40
|
7月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
9月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
514 10
|
8月前
|
数据采集 存储 API
Python爬虫结合API接口批量获取PDF文件
Python爬虫结合API接口批量获取PDF文件
|
人工智能 编解码 文字识别
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
OCRmyPDF 是一款开源命令行工具,专为将扫描的 PDF 文件转换为可搜索、可复制的文档。支持多语言、图像优化和多核处理。
1282 17
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
1367 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
|
12月前
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
1859 5
|
人工智能 文字识别 数据挖掘
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式
MarkItDown 是微软开源的多功能文档转换工具,支持将 PDF、PPT、Word、Excel、图像、音频等多种格式的文件转换为 Markdown 格式,具备 OCR 文字识别、语音转文字和元数据提取等功能。
3347 9
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式
|
JavaScript
jquery图片和pdf文件预览插件
EZView.js是一款jquery图片和pdf文件预览插件。EZView.js可以为图片和pdf格式文件生成在线预览效果。支持的文件格式有pdf、jpg、 png、jpeg、gif。
404 16