Impedir un script del lado del servidor de un acceso directo a la URL

0

Hay un script del lado del servidor escrito en php (por ejemplo, backend_file.php) o coldfusion (por ejemplo, backend_file.cfm).

Digamos que estoy usando Apache y tengo una carpeta web de ejemplo (en mi host local) como:

backend_file.php index.php ¿Es posible restringir el acceso de backend_file.php, cuando se golpea directamente desde el navegador?

Sin embargo, index.php debería poder acceder a backend_file.php?

Nota: se puede acceder a index.php, mediante acceso directo a la URL.

Mencioné que index.php debería poder acceder a backend_file.php, ya que hace que ajax publique u obtenga una solicitud para obtener información de backend_file.php?

    
pregunta ritesh_NITW 13.06.2014 - 20:36
fuente

3 respuestas

2

Si se va a acceder a backend_file.php a través de AJAX, entonces el usuario debe solicitarlo. Si solo se va a acceder a través de require() / include() , puede usar define() y defined() para evitar que se cargue directamente.

En index.php:

define('MAIN_INCLUDED', 1);

En backend_file.php:

if(!defined('MAIN_INCLUDED'))
  exit(1);
    
respondido por el David 14.06.2014 - 22:33
fuente
0

Si tuviera que cambiar el nombre del archivo a una extensión diferente que no es una extensión común para la web, aún podría leerlo desde index.php, pero puede denegar el acceso desde la web. Apache permite esta configuración y, de forma predeterminada, solo se permiten las extensiones web conocidas (php, php5, htm, html, etc.), porque se asignan a manejadores conocidos (es decir, php será procesado por un procesador php, etc.) ) Estos están definidos en el archivo httpd.conf y es mejor que solo abras ese archivo y veas qué extensiones ya están registradas. También es posible que desee evitar otras extensiones comunes que aún no estén disponibles, pero que podrían venir en el futuro.

Simplemente renómbrelo a algo como backend_file.internalonly, y eso debería resolver el problema.

Otra opción es mover el archivo fuera de la carpeta public_html (o www) si puede. Sin embargo, prefiero diferentes extensiones simplemente para poder guardar el archivo en una carpeta determinada.

Si este archivo tiene datos confidenciales (en lugar de solo un código compartido con el que no desea que se le pegue desde afuera), lo eliminaría por completo de la carpeta public_html, en lugar de intentar acceder al control de acceso relacionado soluciones (que son más difíciles de encontrar y probar)

    
respondido por el Omer Iqbal 13.06.2014 - 21:17
fuente
0
  • Los scripts se procesan mediante el motor de script de interpretación (como ASP, PHP), por lo tanto, los navegadores obtienen el resultado HTML del script y no el código fuente.

  • Sin embargo, en el caso de que el motor de secuencias de comandos no esté disponible en su máquina, su servidor HTTP solo generará lo que sea que esté en su archivo de secuencia de comandos, que es lo que no desea permitir.

  • Esto se puede hacer en Apache de manera similar a lo que haces para proteger los archivos .htaccess . Simplemente agregue estas líneas a su archivo config

..

<Files ~ "^.*\.([Pp][Hh][Pp])"> #PHP protection
order allow,deny
deny from all
satisfy all
</Files>
    
respondido por el AK_ 14.06.2014 - 17:43
fuente

Lea otras preguntas en las etiquetas