可以在PDF中运行的JavaScript访问从中下载的域吗?

时间:2015-09-15 23:26:20

标签: javascript security pdf

这是一个安全问题。假设用户A已登录example.com,然后他下载由example.com托管的PDF,并在浏览器中查看该PDF。嵌入在PDF中的JavaScript是否能够访问example.com的API,就像登录用户A一样?

或者换句话说,源自PDF中的JavaScript的API调用是否会通过浏览器可能为该域保留的会话cookie发送到服务器?

2 个答案:

答案 0 :(得分:1)

Acrobat JavaScript中有一些与URL相关的命令。还有可以检索的路径信息。

与URL相关的命令是(列表可能不完整)getURL()launchURL()submitForm()。它们都可以基本上将数据发送到任何服务器,只要该服务器可以对数据执行某些操作。是否在浏览器中查看PDF无关紧要。这确实是一个安全问题。

但是,对于多个版本,至少Adobe产品内置了一个屏障,要么完全禁止,要么允许联系其他服务器的权限,而不是文档的来源。这意味着,在提供者和用户背后做一些事情是非常困难的。

答案 1 :(得分:0)

他们可以互动,但只能通过HostContainer对象进行互动。

  

此对象管理PDF文档与文档之间的通信   文档包含在其中的相应主机容器,   例如HTML页面。指定了文档的主机容器   由Doc hostContainer属性。 Embedded PDF对象提供   容器对象模型的相应API   应用

HostContainer仅限于postMessage与托管页面进行通信的方法:

  

将消息异步发送到主机的消息处理程序   PDF文档的容器。要传递此消息,   主机容器(例如,HTML页面中的元素)必须   已通过设置其messageHandler注册通知   属性。消息传递给的onMessage方法   的MessageHandler。

因此它不像HTML文档那样完全访问DOM。它更像是从另一个文档加载的文档,或null来源(IFrame中动态创建的文档),它可以使用HTML5 postMessage功能以安全的方式与其父框架进行通信。

documentation中还提到了submitForm方法。

  

将表单提交到指定的URL。要调用此方法,您必须是   在Web浏览器中运行或使用Acrobat Web Capture插件   安装。

目前尚不清楚Cookie是否包含在请求中,或者是否设置了referer标头。如果两者都为真,那么如果站点使用referer检查作为防御机制,则可以完成CSRF攻击。