security - with - Siempre devuelve un 404 cuando decides devolver un 403.
it appears you don t havepermission to access this page 403 error forbidden (5)
Ya hay varias preguntas publicadas aquí acerca de devolver un 404 en lugar de un 403 en casos especiales (por ejemplo, archivos .ht * o un directorio determinado), pero no puedo averiguar cómo reemplazar simplemente las 403 respuestas ("De acuerdo, existe, pero todavía tiene que encontrar una forma en ") con 404s (" Lo siento, nunca he oído hablar de él "). Espero que haya una solución simple que no requiera la actualización de expresiones regulares u otros bits del .htaccess para que coincida con los cambios del sitio, solo una simple directiva: "siempre que decida devolver un 403, devuelva un 404 en su lugar" que corresponda a todo el sitio, independientemente de los cambios de configuración.
Luego, si el .htaccess de nivel superior contiene "Opciones-Índices", y cualquier directorio dado no contiene index.html (o equivalente), la URL del directorio simple devolverá 404, pero si alguna vez agrego un index.html a ese directorio, la misma URL del directorio simple devolverá el index.html, sin actualizaciones necesarias para ningún archivo .htaccess.
Ni siquiera me importa si, en el caso de que alguna vez escriba una contraseña en un directorio, una contraseña incorrecta devuelve un 404 (debido a la asignación 404 -> 403). En ese caso, no estoy ocultando nada devolviendo un 404, pero tampoco causa daño. Sin embargo, si hay una manera de DESHACER el Mapa general 403-> 404 para casos especiales (en lugar de hacerlo en casos especiales), eso podría ser aún más útil.
Por supuesto, si estoy pasando por alto algo, ponme en orden.
EDITAR: Drat. Estaba intentando escribir una pregunta de buena calidad aquí, pero mi descripción del comportamiento de "Opciones-Índices" en el segundo párrafo resulta ser errónea. Sin esa línea, una URL de directorio simple muestra "index.html" si existe en el directorio; De lo contrario, revela los contenidos del directorio. (Que el reenvío de / dir a /dir/index.html si existe index.html es la configuración predeterminada del servidor web, a menos que me equivoque). Agregar la línea "Opciones-Índices" deja de ventilar mi ropa en público ( devolviendo un 403, no 404, pero aún así es mejor que exponer los contenidos del directorio), pero ahora la URL del directorio simple devuelve un 403 incluso si existe index.html.
Deseo que se muestre la URL del directorio "mysite.com/mydir" /mydir/index.html si existió y "404" si no existió, pero claramente hay algo más que simplemente reemplazar los 403 con 404.
Aquí hay un fragmento de mi archivo .htaccess que reside en un directorio que he bloqueado, pero que permite el acceso desde las máquinas de LAN. Devuelve un error 404 cada vez !!
# Turn rewrite engine on
RewriteEngine on
RewriteOptions Inherit
# Make it for a specific directory
# RewriteBase /phpMyAdmin
# Block everyone except me
RewriteCond %{REMOTE_HOST} !^192.168.2
RewriteRule .? - [R=404,L]
Hay esperanza, aunque probablemente no haya una forma general de obtener 403 errores para informar 404 errores.
Sospecho que lo que realmente desea es asegurarse de que / ~ root (y cualquier otro usuario existente que no sea HTTP) no devuelva 403 sino 404.
La directiva UserDir en Apache devuelve 403 por diseño. No creo que actualmente se pueda cambiar. PERO-- la directiva ''UserDir'' puede usarse más de una vez en el mismo archivo Apache así:
UserDir public_html UserDir deshabilita root someuser1 someuser1
Esa configuración permitirá el uso de UserDir, pero también informará el preciado encabezado de respuesta 404 a todos aquellos que intenten rastrear su sistema.
Encontré este consejo en el siguiente enlace:
Lo probé yo mismo en Apache 2.2.15 bajo RHEL 6.3 y funciona, incluso cuando se prueba con algo como curl. También estaba buscando una solución a esto. Finalmente encontré algo con lo que puedo trabajar!
Para completar una de las mejores respuestas aquí (como lo mencionaron @WebChemist y @JennyD), una buena manera de resolver esto es devolver 404 Not Found
del documento que usa para manejar 403
errores. Personalmente hago algo como lo siguiente:
.htaccess
en la raíz web ( extracto relevante ):
ErrorDocument 400 /http-errors.php
ErrorDocument 403 /http-errors.php
ErrorDocument 404 /http-errors.php
http-errors.php
en la raíz web ( ejemplo de trabajo condensado ):
<?php
$status = $_SERVER[''REDIRECT_STATUS''];
// If it''s a 403, just bump it up to a 404
if ( $status == 403 ) $status++;
$codes = array(
400 => array( ''400 Bad Request'', ''The request cannot be fulfilled due to...'' ),
404 => array( ''404 Not Found'', ''The resource you requested was not found...'' ),
500 => array( ''500 Internal Server Error'', ''The request was unsuccessful...'' )
);
$title = $codes[$status][0];
$message = $codes[$status][1];
header( $_SERVER[''SERVER_PROTOCOL''] . '' '' . $title );
echo "<h1>$title</h1>/n<p>$message</p>";
Puedes hacer fácilmente un falso 403 -> 404 haciendo
ErrorDocument 403 /404.php
Donde 404.php es su página de respuesta 404 formateada, pero eso aún devolvería 403 en el encabezado de respuesta. Si desea devolver un encabezado 404, podría hacer una página 403 con un redireccionamiento de encabezado que devuelva el código 404, pero el redireccionamiento podría seguir siendo visible ...
No estoy realmente seguro de poder realizar una sustitución global 403-> 404 con .htaccess puro
Editar:
jugado con un poco, 2 métodos puros .htaccess que puedes probar:
1) haga que cualquier url que termine en una barra redirija a una página de índice como:
RewriteRule ^(.*)/$ /$1/index.php [NC,L]
así que si tiene una página de índice, se mostrará, pero si no, aparecerá 404 en la solicitud de página de índice que falta. Si omite la [R], la url seguirá apareciendo como / no index.php url amigable de SEO canónico :) no puedo decir que esto no causará problemas en ningún otro lugar, aunque ...
2)
en una regla de reescritura, puede usar r = 404 para devolver un código 404.
RewriteRule ^(.*)/$ - [R=404, NC,L]
sin embargo RewriteCond %{REQUEST_FILENAME} !-f
o RewriteCond %{REQUEST_FILENAME} -d
no ayude, lo que significa que todas las barras diagonales al final 404, incluso cuando la página de índice esté presente. Puede solucionar este problema especificando carpetas para proteger (o ignorar) en reglas de RewriteCond adicionales, pero eso no sería exactamente "automático", ya que tendría que agregar reglas de RewriteCond a medida que se agreguen más carpetas para proteger | ignorar
Que yo sepa, no existe una directiva tan simple. Todavía es posible, pero es un poco más complicado de lo que te puede gustar.
Puede usar la directiva ErrorDocument para establecer las 403 respuestas a un script, y luego hacer que el script responda con una respuesta 404 en lugar de una 403. Hay algunos consejos en apache.org que pueden ser útiles