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
Publicar un comentario