¿Cuál es la forma estándar de no mostrar guiones CGI?

¿Cuál es la forma estándar de no mostrar guiones CGI?

Configuré un directorio CGI usando el userdirmod en Apache. Estoy usando configuraciones lo más generales posible para que sean aplicables a otros usuarios en mi computadora portátil. Llegué a un punto en el que puedo ejecutar el script usando esta URL:

http://localhost/~tomas/cgi-bin/hw.cgi

Pero también puse un enlace a mi public_htmldirectorio raíz del servidor en /var/www/html, de modo que cuando localhostse llama a la URL, obtengo el índice con un enlace a mi directorio en localhost/tomas. El enlace funciona bien y muestra otro índice, uno de mi usuario. Ahora, el cgi-bin privado está en /home/*/public_html/cgi-bin, por lo que puedo ver cgi-bincuándo obtengo el índice privado. Ahora, cuando entro a este directorio, me sale otro índice con los CGI. Lo cual está bien para mí, aunque no estoy seguro de si esto se considera seguro. Pero si llamo a un CGI desde allí, no se ejecuta y se muestra en su lugar. Este es el problema.

Hasta donde yo sé, se trata de que Apache no ve

http://localhost/tomas/cgi-bin/hw.cgi

como

http://localhost/~tomas/cgi-bin/hw.cgi

He estado buscando una directiva que lo hiciera funcionar, pero no la encuentro. Ni siquiera estoy seguro de qué tengo a mi disposición: ¿una directiva o algo más?

Aquí está mi usermod.conf:

<IfModule mod_userdir.c>
    UserDir public_html
    UserDir disabled root

    <Directory /home/*/public_html>
        AllowOverride FileInfo AuthConfig Limit Indexes
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        <Limit GET POST OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>

    <Directory /home/*/public_html/cgi-bin>
        Options ExecCGI
        AddHandler cgi-script .cgi
    </Directory>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Respuesta1

Dado que se puede acceder al cgi-bindirectorio a través de una ruta separada, una forma de hacerlo es copiar la Directorysección con la ruta alternativa, justo debajo de la otra, por ejemplo:

<Directory /var/www/html/*/cgi-bin>
    Options ExecCGI
    AddHandler cgi-script .cgi
</Directory>

Esto también debería deshabilitar los listados de directorios.

Si prefiere tener los índices habilitados, agréguelos Indexeso Optionshaga que hereden sus opciones principales cambiando ExecCGIa +ExecCGI, por ejemplo

<Directory /var/www/html/*/cgi-bin>
    Options Indexes ExecCGI
    AddHandler cgi-script .cgi
</Directory>

Preferiría usar Options Indexes ExecCGIover Options +ExecCGIya que de esta manera no heredarás ninguna opción no deseada.

información relacionada