Django clickjacking中间件和Firefox嵌入式PDF

问题描述 投票:0回答:1

我最近使用django.middleware.clickjacking.XFrameOptionsMiddleware为Django应用程序添加了clickjacking保护,但发现PDF不再加载到Firefox中。虽然Chrome,Safari和Edge按预期嵌入了PDF,但Firefox会引发以下控制台错误:

Load denied by X-Frame-Options: <site_base>/<file_path>.pdf does not permit framing.

我找到了@xframe_options_exempt装饰器,我认为这会有所帮助,但这只是包装视图,而这些直接通过Apache提供。我发现的唯一修复是获得“Ignore X-Frame-Options Header”浏览器插件,这不是一个客户友好的解决方案。

我尝试使用<embed><object><iframe>嵌入PDF并导致相同的浏览器控制台错误,如果我删除clickjacking中间件,PDF再次加载就好了。

以前有人遇到这样的事吗?相关代码:

<select id="pdf_graph_selection" onchange="updatePDF()">
    {% for pdf_graph in pdf_graphs %}
        <option value="{{pdf_graph.url"}}>{{pdf_graph.name}}</option>
    {% endfor %}
</select>
<div id="pdf_container"></div>
function updatePDF() {
    let new_source = $("#pdf_graph_selection").val();
    let new_graph = "'<embed src='" + new_source + "' width='70%' height='900px' class='pdf_embed'></embed>;
    $("#pdf_container").html(new_graph);
}
django pdf firefox x-frame-options
1个回答
0
投票

我的同事能够帮助解决这个问题 - 我们有一个自定义文件响应处理程序,它必须做一些Firefox不喜欢的事情。通过添加@xframe_options_sameorigin装饰器,它现在正在工作。

© www.soinside.com 2019 - 2024. All rights reserved.