Evitar el acceso directo a un archivo de inclusión php
Tengo un archivo php que usaré exclusivamente como inclusión. Por lo tanto, me gustaría arrojar un error en lugar de ejecutarlo cuando se accede directamente escribiendo la URL en lugar de incluirlo.
Básicamente necesito hacer una verificación de la siguiente manera en el archivo php:
if ( $REQUEST_URL == $URL_OF_CURRENT_PAGE ) die ("Direct access not premitted");
¿Hay una forma fácil de hacer esto?
Agregue esto a la página que desea que solo se incluya
<?php
if(!defined('MyConst')) {
die('Direct access not permitted');
}
?>
luego en las paginas que lo incluyen agregar
<?php
define('MyConst', TRUE);
?>
La forma más sencilla para la situación genérica de "aplicación PHP ejecutándose en un servidor Apache que usted puede o no controlar completamente" es colocar sus inclusiones en un directorio y denegar el acceso a ese directorio en su archivo .htaccess. Para ahorrarle a la gente la molestia de buscar en Google, si está utilizando Apache, coloque esto en un archivo llamado ".htaccess" en el directorio al que no desea que se pueda acceder:
Deny from all
Si realmente tiene control total del servidor (más común hoy en día incluso para aplicaciones pequeñas que cuando escribí esta respuesta por primera vez), el mejor enfoque es colocar los archivos que desea proteger fuera del directorio desde el que sirve su servidor web. . Entonces, si su aplicación está en /srv/YourApp/
, configure el servidor para servir archivos /srv/YourApp/app/
y coloque las inclusiones en /srv/YourApp/includes
, de modo que literalmente no haya ninguna URL que pueda acceder a ellos.
Tengo un archivo que necesito actuar de manera diferente cuando se incluye y cuando se accede directamente (principalmente a print()
vs return()
). Aquí hay un código modificado:
if(count(get_included_files()) ==1) exit("Direct access not permitted.");
El archivo al que se accede es siempre un archivo incluido, de ahí el == 1.