validar subir subida servidor reemplazar para manejo etiquetas ejemplos ejemplo codigo archivos archivo _files php

subida - subir archivos php mysql



¿Cuál es la mejor manera de solo permitir que se incluya un archivo PHP? (7)

Desde un módulo PHP Nuke:

<?php if (!eregi("modules.php", $PHP_SELF)) { die ("You can''t access this file directly..."); } // more code ... ?>

Reemplace modules.php con su nombre de archivo, y ese archivo no puede ser llamado directamente.

Quiero asegurarme de que las personas no puedan escribir el nombre de un script PHP en la URL y ejecutarlo. ¿Cuál es la mejor manera de hacer esto?

Podría establecer una variable en el archivo que incluirá este archivo y luego verificar esa variable en el archivo que se está incluyendo, pero ¿hay alguna manera más fácil?


Durante mucho tiempo he mantenido todo, excepto los scripts directamente visibles fuera de la raíz web. Luego configure PHP para incluir su directorio de scripts en la ruta. Una configuración típica sería:

appdir include html

En la configuración de PHP (ya sea la configuración global de PHP o en un archivo .htaccess en el directorio html ) agregue esto:

include_path = ".:/path/to/appdir/include:/usr/share/php"

o (para Windows)

include_path = ".;c:/path/to/appdir/include;c:/php/includes"

Tenga en cuenta que esta línea probablemente ya esté en su archivo php.ini , pero puede ser comentada permitiendo que los valores predeterminados funcionen. También podría incluir otras rutas. Asegúrate de mantener esos, también.

Si lo está agregando a un archivo .htaccess, el formato es:

php_value include_path .:/path/to/appdir/include:/usr/share/php

Finalmente, puede agregar la ruta programáticamente con algo como esto:

$parentPath = dirname(dirname(__FILE__)); $ourPath = $parentPath . DIRECTORY_SEPARATOR . ''include''; $includePath = ini_get(''include_path''); $includePaths = explode(PATH_SEPARATOR, $includePath); // Put our path between ''current directory'' and rest of search path if ($includePaths[0] == ''.'') { array_shift($includePaths); } array_unshift($includePaths, ''.'', $ourPath); $includePath = implode(PATH_SEPARATOR, $includePaths); ini_set(''include_path'', $includePath);

(Basado en código de trabajo, pero modificado, por lo tanto no probado)

Esto debe ejecutarse en su archivo de interfaz (por ejemplo, index.php ). Lo puse en un archivo de inclusión separado que, después de modificar lo anterior, se puede incluir con algo como #include ''../includes/prepPath.inc'' .

He usado todas las versiones que he presentado aquí con éxito. El método particular utilizado depende de las preferencias y de cómo se implementará el proyecto. En otras palabras, si no puede modificar php.ini , obviamente no puede usar ese método


En algunas de las aplicaciones de código abierto que he buscado, incluidas Joomla y PHPBB, declaran una constante en el archivo main includes y luego verifican que la constante exista en cada una de las siguientes:

// index.php require_once ''includes.php''; // includes.php define(''IN_MY_PROJECT'', true); include ''myInc.php''; // myInc.php defined(''IN_MY_PROJECT'') || die("No direct access, plsktnxbai");


Puede verificar el URI y ver si ese archivo se está llamando con `

$_SERVER[''SCRIPT_FILENAME'']

o puede mover el archivo fuera de la carpeta pública, esta es una mejor solución.


Una forma en que he visto muchas cosas es crear una variable que debe estar presente en cada archivo incluido y verificar lo primero en cada inclusión:

if(!isset($in_prog)){ exit; }


Zend Framework recomienda que guardes los archivos fuera de la raíz web, como lo sugirió Unkwntech. Yo diría que esta es la solución más segura y más infalible.


Supongo que la mejor manera es colocar los archivos que desea incluir dentro de la carpeta " / include " y poner el acceso a la derecha 700 en la carpeta