Django clickjacking中间件和Firefox嵌入式PDF

时间:2019-03-20 16:35:46

标签: django pdf firefox x-frame-options

我最近使用django.middleware.clickjacking.XFrameOptionsMiddleware向Django应用添加了点击劫持保护,但是发现Firefox中不再加载PDF。当Chrome,Safari和Edge按预期嵌入PDF时,Firefox会引发以下控制台错误:

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

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

我尝试使用<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);
}

1 个答案:

答案 0 :(得分:0)

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