Entradas etiquetadas con seguridad
Symfony: El controlador (III)
0SEGURIDAD DE LA ACCIÓN
Con Symfony podemos controlar quién puede acceder a una acción concreta, utilizando para ello las herramientas de identificación de usuarios que el framework nos provee.
Una acción segura sólo podrá ser ejecutada por un usuario registrado y que tenga la acreditación para ello.
- Las acciones seguras requieren que los usuarios estén autenticados.
- Las credenciales son privilegios de seguridad agrupados bajo un nombre y que permiten organizar la seguridad en grupos.
- ver:
- is_secure: off # Todos los usuarios pueden ejecutar la acción "ver"
-
- modificar:
- is_secure: on # La acción "modificar" es sólo para usuarios autenticados
-
- borrar:
- is_secure: on # Sólo para usuarios autenticados
- credentials: admin # Con credencial "admin"
-
- all:
- is_secure: off # off es el valor por defecto
Lo que sucede cuando un usuario trata de acceder una acción restringida depende de sus credenciales:
- Si el usuario está autenticado y tiene las credenciales apropiadas, entonces la acción se ejecuta.
- Si el usuario no está autenticado, es redireccionado a la acción de login.
- Si el usuario está autenticado, pero no posee las credenciales apropiadas, será redirigido a la acción segura por defecto.
Las páginas login y secure son bastante simples, por lo que seguramente será necesario personalizarlas. Se puede configurar que acciones se ejecutan en caso de no disponer de suficientes privilegios en el archivo settings.yml de la aplicación cambiando el valor de las propiedades:
- all:
- .actions:
- login_module: default
- login_action: login
-
- secure_module: default
- secure_action: secure
OTORGANDO ACCESO
Los métodos utilizados para permitir acceso a una acción segura se encuentran en el objeto sfUser. El estado identificado se establece con setAuthenticated() y se puede comprobar con isAuthenticated():
- <?php
-
- class miCuentaActions extends sfActions
- {
- public function executeLogin($peticion)
- {
- if ($peticion->getParameter('login') == 'valor')
- {
- $this->getUser()->setAuthenticated(true);
- }
- }
-
- public function executeLogout()
- {
- $this->getUser()->setAuthenticated(false);
- }
- }
Las credenciales son un poco más complejas de tratar, ya que se pueden verificar, agregar, quitar y borrar:
- <?php
-
- class miCuentaActions extends sfActions
- {
- public function executeEjemploDeCredenciales()
- {
- $usuario = $this->getUser();
-
- // Agrega una o más credenciales
- $usuario->addCredential('parametro');
- $usuario->addCredentials('parametro', 'valor');
-
- // Verifica si el usuario tiene una credencial
- echo $usuario->hasCredential('parametro'); => true
-
- // Verifica si un usuario tiene una de las credenciales
-
- // Verifica si el usuario tiene ambas credenciales
-
- // Quitar una credencial
- $usuario->removeCredential('parametro');
- echo $usuario->hasCredential('parametro'); => false
-
- // Elimina todas las credenciales (útil en el proceso de logout)
- $usuario->clearCredentials();
- echo $usuario->hasCredential('valor'); => false
- }
- }
Las credenciales se pueden utilizar también para mostrar contenido autenticado en una plantilla:
- <?php
-
- <ul>
- <li><?php echo link_to('seccion1', 'content/seccion1') ?></li>
- <li><?php echo link_to('seccion2', 'content/seccion2') ?></li>
- <?php if ($sf_user->hasCredential('seccion3')): ?>
- <li><?php echo link_to('seccion3', 'content/seccion3') ?></li>
- <?php endif; ?>
- </ul>
CREDENCIALES COMPLEJAS
a sintaxis YAML utilizada en el archivo security.yml permite restringir el acceso a usuarios que tienen una combinación de credenciales, usando asociaciones de tipo AND y OR. Con estas combinaciones, se pueden definir flujos de trabajo y sistemas de manejo de privilegios muy complejos — como por ejemplo, un sistema de gestión de contenidos (CMS) cuya parte de gestión sea accesible solo a usuarios con credencial admin, donde los artículos pueden ser editados solo por usuarios con credenciales de editor y publicados solo por aquellos que tienen credencial de publisher:
- editarArticulo:
- credentials: [ admin, editor ] # admin AND editor
-
- publicarArticulo:
- credentials: [ admin, publisher ] # admin AND publisher
-
- gestionUsuarios:
- credentials: [[ admin, superuser ]] # admin OR superuser
Cada vez que se añade un nuevo nivel de corchetes, la lógica cambia entre AND y OR. Así que se pueden crear combinaciones muy complejas de credenciales, como la siguiente:
- credentials: [[root, [supplier, [owner, quasiowner]], accounts]]
- # root OR (supplier AND (owner OR quasiowner)) OR accounts
CONFIGURACIÓN DEL MÓDULO
Algunas características de los módulos dependen de la configuración. Para modificarlas, se debe crear un archivo module.yml en el directorio config/ y se deben definir parámetros para cada entorno (o en la sección all: para todos los entornos).
- all: # Para todos los entornos
- enabled: true
- is_internal: false
- view_class: sfPHP
- partial_view_class: sf
El parámetro enabled permite desactivar todas las acciones en un módulo. En ese caso, todas las acciones se redireccionan a la acción module_disabled_module/module_disabled_action (tal y como se define en el archivo settings.yml).
El parámetro is_internal permite restringir la ejecución de todas las acciones de un módulo a llamadas internas. Esto es útil por ejemplo para acciones de envío de correos electrónicos que se deben llamar desde otras acciones para enviar mensajes de e-mail, pero que no se deben llamar desde el exterior.
El parámetro view_class define la clase de la vista. Debe heredar de sfView. Sobreescribir este valor permite utilizar otros sistemas de generación de vistas con otros motores de plantillas, como por ejemplo Smarty.
El parámetro partial_view_class define la clase de la vista que se emplea para los elementos parciales de este módulo. La clase indicada debe heredar de sfPartialView.
Consejos para pequeños internautas
0En la página web del Grupo de Delitos Telemáticos de la Guardia Civil, existen varios apartados con consejos para navegar de una forma segura por la red. Uno de esos apartados es el referente a los niños que acceden a la red:
- No des nunca tu nombre, no digas donde vives ni como se llaman tus padres, no envíes fotografías tuyas ni de tu familia. No informes de tu horario de colegio ni de quien te va recoger.
- Si alguien te dice algo que te resulta incómodo o molesto díselo rápidamente a tus padres.
- No quedes nunca con nadie que hayas conocido en Internet sin el conocimiento y la autorización de tus padres.
- Nunca compres nada por Internet sin el conocimiento y consentimiento de tus padres.
- No te descargues programas, música, películas, ni videojuegos sin el conocimiento de tus padres, aunque la página diga que es gratuito. Algunos de estos ficheros contienen contenidos para adultos o programas ocultos que pueden dañar tu ordenador y espiar tu navegación.