Cómo bloquear el acceso a todas las imágenes desde la url

Cómo bloquear el acceso a todas las imágenes desde la url




En ocasiones es necesario proteger los archivos desde fuera del sitio web, normalmente la configuración permite ver los archivos si se cuenta con la url del archivo, aquí te mostramos cómo evitarlo. 

Ejemplo de cómo evitar ver archivos si no estas autenticado con una sesión php

Para éste ejemplo consideramos que tienes instalado algún método de autenticación en tu sitio, es decir que para entrar debes tener un usuario y contraseñas.

La configuración de Yii2 normalmente permite que tu puedas ver cualquier imagen ó descargar cualquier archivo solo con tener la url, sin importar si estas logeado o no. 

http://midominio.com/img/imagen.jpg


Para evitar esto puedes pase lo siguiente

Paso # 1

Niega el acceo via .htaccess a todas las imágenes

Al negar el acceso con este comando ya nadie podrá ver las imágenes.



RewriteEngine on

RedirectMatch 403 ^/midominio/web/uploads/.*$ 

En éste ejemplo estamos negando todo acceso mediante un error 403 "Forbidden", con esto lo que logramos es que no podrán tener más acceso. 


Paso # 2

Crear un controller especial para validar si existe una sesión activa.


El controller debe darse de alta con el método de seguridad que se tenga instalado. 






namespace app\controllers;

use Yii;
use yii\web\Response;

class ImageController extends \yii\web\Controller
{
    public function actionIndex($imgPath)                        
    {
        if(Yii::$app->user->isGuest){ // Si no está identificado
             echo "Usted no está autorizado para ver esto";
        }else{  // Si esta identificado
             $imgFullPath = "D:/xampp/htdocs/miproyecto/web/uploads/" . $imgPath;
                if (file_exists($imgFullPath)) {
                    header('Content-Type: image/jpg');
                    readfile($imgFullPath);
                    return;
                }else{
                    echo "File dont exists";
                }
        }        
    }

}

El parámetro que se pasa como parámetro puede ser utilizado para mostrar la imagen de manera dinámica, es decir pasarlo como parámetro, de esta manera es posible validar si el usuario que está haciendo la petición tendrá acceso a la imagen o no.


http://midominio.com/image?imgPath=/files/empleados/7/2020/imagen.jpg


Special thanks to: 

https://stackoverflow.com/users/8997395/serghei-leonenco






Comentarios

Aprende Yii2


Lo más Visto

Tutorial de implementación de calendario de rango de fechas con Karkit en gridView

Guía rápida para uso de widget kartik para select para formulario

Cómo incluir una vista dentro de un modal

Google Plus desaparecerá el 4 de Abril de 2019

Crear fomulario HTML con checkbox sin Active Record

hostinger

ventana bienvenida