Я недавно добавил защиту от кликджекинга в приложение 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);
}