Vale la pena limitare l'accesso diretto ai file dei temi?


31

Di tanto in tanto ho incontrato il seguente frammento di temi:

if ( ! defined('ABSPATH')) exit('restricted access');

È all'inizio di alcuni (tutti?) File PHP in un tema e dovrebbe impedire l'accesso diretto al file da fonti nefaste.

Vedo che questo non è incluso in Twenty Ten o Eleven e non l'ho mai visto raccomandato nella documentazione ufficiale di WordPress. Mi sembra una buona idea, ma non conosco abbastanza bene la sicurezza per giudicarla e non riesco a trovare molto con Google.

È qualcosa che dovrei avere nei miei temi personalizzati? Se è così, dovrebbe essere in tutti i file PHP o solo in alcuni?


7
Solo per i lettori successivi, questo può essere scritto più breve e più bello:defined('ABSPATH') OR exit;
Kaiser

o anche più breve: defined('WPINC') ? : die();P
Tim Elsass,

Mi chiedo anche se valga la pena inserire un codice come questo solo per evitare di vedere gli errori PHP sulle funzioni indefinite nei miei log degli errori. I robot sembrano voler colpire direttamente questi file a volte e ricevo errori come 'Chiama per la funzione indefinita query_posts ()' perché il bootstrap WP non è stato caricato
Matt Keys,

Risposte:


26

Di solito non ne hai bisogno. Ma ... c'è almeno un caso limite:

  • Se un file del tema è una parte del modello ,
  • e utilizza variabili globali dal contesto chiamante (file principale),
  • e register_globals è on,
  • e sta semplicemente usando queste variabili senza alcun controllo di sicurezza ...

... un utente malintenzionato può chiamare questo file, impostare le variabili mancanti con GETo POSTe far stampare il file del tema. E poi c'è un problema di sicurezza.

Quindi ... l'opzione migliore non è un controllo di contesto come quello del tuo esempio, ma un buon codice: evita le variabili globali, controlla il loro contenuto prima di stamparlo.

In alcuni casi aggiungo il controllo di contesto quando penso che qualcun altro userà il mio codice e lo cambierà senza pensare alla sicurezza. Non fa male.


Se una parte del modello contenesse ancora almeno una chiamata di funzione che provocherebbe un errore irreversibile di PHP, questo scenario sarebbe ancora possibile?
Chris_O,

@Chris_O Dipende dall'ordine di apparizione.
fuxia

Ha senso e concorda totalmente su un'altra ragione per non utilizzare le variabili globali tra le chiamate di file.
Chris_O,

1
È sempre meglio prevenire che curare. Troppa sicurezza non può far male, vero?
Sean Berg,

2
Se fai tutto nel modo giusto, non dovresti usare il codice che non è necessario. Questa domanda è la prova che rende il codice più difficile da seguire.
fuxia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.