2015-10-21 27 views
12

Sto tentando di abilitare django per consentire a una vista specifica di essere incorporata su siti esterni, preferibilmente senza restrizioni sui siti.Come configurare X-Frame-Options in Django per consentire l'incorporamento iframe di una vista?

Nel mio file views.py, ho aggiunto il seguente codice, dove la vista futurebig è quello che voglio per consentire per essere incorporato:

from django.views.decorators.clickjacking import xframe_options_sameorigin 
... 
@xframe_options_sameorigin 
def futurebig(request): 
    ... 
    return render_to_response('templates/iframe/future_clock_big.html', context_dict, context) 

che non aiuta come Capisco perché abilita solo l'incorporamento nello stesso server.

Come posso impostare le intestazioni per quella vista specifica per consentirne l'integrazione in qualsiasi sito Web?

Per la cronaca, sono solo uno sviluppatore di frontend, lo sviluppatore di backend che ha sviluppato il sito non lavora più con me e ha rifiutato di documentare il suo codice, quindi, se qualcuno mi può aiutare e spiegare attentamente dove e quali modifiche Dovrei farlo, lo approverò molto.

Grazie.

Per quanto ne so, la versione Django è 1.6

risposta

24

Si sta andando nella giusta direzione, ma decoratore esatto che sarà necessario per raggiungere questo obiettivo è 'xframe_options_exempt'.

from django.http import HttpResponse 
from django.views.decorators.clickjacking import xframe_options_exempt 

@xframe_options_exempt 
def ok_to_load_in_a_frame(request): 
    return HttpResponse("This page is safe to load in a frame on any site.") 

PS: DJango 1.6 non è più supportato. È un buon momento per ottenere un aggiornamento.

+6

credo, abbiamo bisogno per ALLOW-FROM delle opzioni iframe https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/X-Frame-Options per definire domini accettabili, non solo rimuovere X-Frame Header, per favore, qualcuno , crea il biglietto (non ho accesso) – Vermus

2

A quanto pare è possibile impostare una regola nelle impostazioni raccontare la seguente: decoratore

X_FRAME_OPTIONS = 'ALLOW-FROM https://example.com/' 

anche al giorno d'oggi si dovrebbe prendere in considerazione di trasferirsi a CSP

Content-Security-Policy: frame-ancestors 'self' example.com *.example.net ; 

Vedi https://stackoverflow.com/a/25617678/186202