Drupal 7 blocks external frame due to X-Frame-Options

As documented (https://www.drupal.org/node/2735873) Drupal comunity removed the possibility to embedd a Drupal site into an external frame to avoid clickjacking.

The problem

Basically you can not put an external Drupal website into an iFrame anymore, if you try to embedd a website with X-Frame-Options restrictions you will get a browser console error stating something like this

because it set ‘X-Frame-Options’ to ‘sameorigin’

This behavior is obtained in drupal_deliver_html_page (in common.inc) in which it is checked what I show you below:

To see your Drupal website displayed into a frame of an external website you must change X-Frame-Options (or remove it).

The solution

Although Drupal documentation (https://www.drupal.org/node/2735873) explains that you can remove the X-Frame-Options header via the page_alter, I discovered that under certain conditions this strategy does not work at all.

In my case I was able to surf the site from a Frame only if I was logged in with an active session.

To achieve a better solution, my suggestion is to modify the Drupal variable x_frame_options before the drupal_deliver_html_page is called.
I did this (and it works like charme) via page_delivery_callback_alter, where I set the variable to FALSE under certain satisfited conditions (i.e. the page is requested from a whitelist domain).

Hope this help.

Altering ECK save message

Altering ECK save messages is now possible thanks to these hooks:

defined in eck.api.php.

I strongly suggest you to check that file because is full of interesting hooks that allow developers to customize eck standard (and horrible) behavior.

Enjoy!

Redirect di immagini via .htaccess

Questo articolo spiega come eseguire un redirect di un’immagine attraverso il file .htaccess.

Sarà capitato a tutti gli sviluppatori web di avere un ambiente di test e un ambiente di produzione, rispettivamente dove vengono testate le modifiche e dove esse prendono corpo.

Una delle questioni più annose quando si usano due o più ambienti per lo sviluppo di un progetto, è la sincronia dei dati in essi presenti per finalità di testing o di sviluppo.

Un tipico caso è quello di un ambiente di test (o anche di sviluppo) che non contiene tutti gli articoli, i prodotti, le pagine che in produzione, a seguito di un lavoro certosino, sono state create da una redazione e sebbene sia a volte sufficiente portare tutto il database dalla produzione all’ambiente di test per ottenere le istanze dei contenuti ivi assenti, questo discorso non può essere fatto per le immagini (ed in generale per i file).

Ma vi immaginate a trasferire centinaia (a volte migliaia) di immagini da un server all’altro? Una follia …

Allora si potrebbero sempre cambiare i path delle immagini referenziate mediante il DB, ma non è mai bello dover smanettare nel database specie se è di dimensioni abnormi e specie se questa operazione va ripetuta nel tempo.

Per questa ragione ci viene incontro il file .htaccess che ci consente di redirigere tutto quello che non viene reperito sull’ambiente locale ad un altro ambiente remoto (accessibile ovviamente).

Con queste poche righe mostro un esempio:

L’esempio illustrato è stato testato con ambienti in cui è montato Drupal.

Ovviamente è necessario che tale codice sia presente sul solo ambiente di test per evitare sorprese sgradite.

Facebook non invia la verifica via SMS? Ecco la soluzione!

Il problema

Qualche giorno fa volevo creare un’applicazione per Facebook, così sono andato nella pagina deidcata agli sviluppatori e ho cercato di loggarmi. Il sistema mi ha chiesto di inserire una carta di credito o un numero di cellulare per verificare la mia attendibilità, io ho inserito il mio numero di cellulare ed il sistema mi ha notificato che mi sarebbe arrivato un SMS con un codice di verifica, ma questo NON è mai arrivato.

La soluzione

La soulzione che mi appresto ad esporre consiste in pochi semplici passi, ma non ho la certezza che essa possa funzionare per tutti.

 

  1. Loggatevi al vostro account Facebook
  2. Recatevi alla pagina http://www.facebook.com/mobile/?settings,
  3. In basso (o da qualche altra parte) ci dovrebbe essere la voce “SMS di Facebook”, cliccateci.
  4. Seguite la procedura che vi farà inserire
    • Paese (Italia, Francia, Messico ecc ecc)
    • Operatore (Wind, TIM, 3, Vodafone)
    • Numero di telefono
  5. Vi sarà chiesto di inviare un SMS con scritto “F” ad un certo numero, dal quale dovrebbe ritornarvi il codice di verifica
  6. Una volta arrivato il codice di verifica via SMS inseritelo e terminate la procedura di riconoscimento

Se tutto è andato bene, il codice è arrivato e lo avete inserito correttamente nel form visitando la pagina http://www.facebook.com/developers/apps.php#!/developers/createapp.php dovreste poter creare un’applicazione senza problemi.

Forse ti sarà utile sapere che…

  • In un primo momento, come documentato nel post precedente, avevo inserito un numero Wind vecchio, ed intestato a me come privato, ma non ho ricevuto nessun SMS. Successivamente, mediante la procedura sopra descritta ho inserito un altro numero associato ad una partita IVA e più ‘nuovo’ e l’SMS con il codice mi è arrivato subito.
    Avendo visto abilitato il mio pannello di controllo per gli SMS ed i servizi mobile di Facebook, ho potuto capire che il numero che avevo fornito in precedenza era ancora in attesa di verifica, ma l’operatore indicato al suo fianco non era WIND, ma un’altro che ho per incuria dimenticato di annotare.
    Mi viene da pensare che durante la procedura ‘spontanea’, ovvero quella che scaturisce dall’azione “Crea un’applicazione’ e che ho descritto nel post precedente, sia valida per i soli Stati Uniti, infatti non ricordo di aver visto un form che mi facesse scegliere l’operatore.
  • Il numero al quale si deve mandare l’SMS è un numero che comincia con 48***** e che a quanto ho capito vi consentirà di ricevere notifiche Facebook via SMS, a pagamento! Io ho deciso di disattivare questo servizio, inviando “stop”, e non ho avuto alcun problema di verifica.

 

Spero di essere stato utile!