Промежуточное ПО Django clickjacking и встроенные в Firefox PDF-файлы - PullRequest
0 голосов
/ 20 марта 2019

Я недавно добавил защиту от кликджекинга в приложение Django с django.middleware.clickjacking.XFrameOptionsMiddleware, но обнаружил, что 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);
}

1 Ответ

0 голосов
/ 20 марта 2019

Мой коллега смог помочь разобраться - у нас был собственный обработчик ответа на файл, который, должно быть, делал то, что Firefox не любил.Добавив декоратор @xframe_options_sameorigin, он теперь работает.

...