actividad 5
Sesiones
Una sesión representa un único periodo en el que el usuario ha interactuado con la aplicación. Las sesiones sirven como contenedores útiles de actividad medida, que incluye visitas a una pantalla, eventos y transacciones de comercio electrónico.
Fuente: https://developers.google.com/analytics/devguides/collection/android/v4/sessions?hl=es-419
una sesión es un intercambio de información interactiva semi-permanente, también conocido como diálogo, una conversación o un encuentro, entre dos o más dispositivos de comunicación, o entre un ordenador y usuario. Una sesión se establece en un cierto momento y se finaliza poco después. Una sesión de comunicación establecida puede implicar más de un mensaje en cada dirección. Una sesión es típicamente, pero no siempre, con estado, significando que al menos una de las partes comunicantes necesita salvar información sobre el historial de sesión para ser capaz de comunicarse, o sin estado, donde la comunicación consta de peticiones independientes con respuestas.
Fuente:
https://es.wikipedia.org/wiki/Sesi%C3%B3n_(inform%C3%A1tica)
ACTIVIDAD
Investigar sobre los siguientes temas:
1. Importancia de la seguridad en los aplicativos web
En la actualidad el crecimiento de internet ha impactado directamente en la seguridad de la información manejada cotidianamente. Sitios de comercio electrónico, servicios, bancos e incluso redes sociales contienen información sensible que en la mayoría de los casos resulta ser muy importante.
Se puede decir que uno de los puntos más críticos de la seguridad en Internet son las herramientas que interactúan de forma directa con los usuarios, en este caso los servidores web. Es común escuchar sobre fallas en los sistemas de protección de los servidores más frecuentemente utilizados, por ejemplo, Apache, NGINX, IIS, etc. (Build With, 2016) O en los lenguajes de programación en que son escritas las aplicaciones. Sin embargo, la mayoría de los problemas detectados en servicios web no son provocados por fallas de ninguna de estas partes, si no que los problemas se generan por malas prácticas de parte de los programadores.
Debemos entender que programar aplicaciones web seguras no es una tarea fácil, ya que requiere por parte del programador, no sólo cumplir con el objetivo funcional básico de la aplicación, sino una concepción general de los riesgos que puede correr la información procesada por el sistema.
fuente: https://www.seguridad.unam.mx/historico/documento/index.html-id=17
La seguridad de una página web no solo depende de la programación de la misma, sino también del modelo de negocio, la arquitectura, la plataforma de alojamiento y los diferentes agentes que toman al desarrollo y la entrega del servicio
Hoy en día Internet es de vital importancia para todos ya que muchos servicios residen y/o se ofrecen vía online. Por lo tanto, la gestión de los riesgos que pueden afectar a estos sistemas es un aspecto muy importante a tomarse en consideración. Sin entrar en detalles técnicos, podemos resumir que el riesgo se calcula mediante una fórmula aritmética en base a la probabilidad, al impacto de una vulnerabilidad y al valor del activo afectado. Una vulnerabilidad podemos considerarla como una debilidad presente en nuestro sistema la cual podría ser explotada por un atacante para comprometerlo. En las páginas Web podemos encontrar diferentes vulnerabilidades como, por ejemplo: inyecciones SQL, Cross Site Scripting (XSS), inclusiones de ficheros locales (LFI) y remotos (RFI), Server Side Includes (SSI), etc… En Internet es posible encontrar diferentes estadísticas de distribuciones de vulnerabilidades de las páginas Web. En ellas es posibles apreciar que las inyecciones SQL y XSS siguen siendo las vulnerabilidades más frecuentes. Existen diferentes metodologías de gestión de riesgos como MAGERIT, CRAMM, y OCTAVE.
Fuente: https://3comunicacion.com/importancia-de-la-seguridad-en-las-paginas-web/
aporte Personal:
Es importante la seguridad en aplicativos web ya que esto contribuye a que estaos sistemas tengan menos vulnerabilidades, teniendo en cuenta que hoy en día cada vez son más frecuentes los ataque a estos sitios, lo que pone en peligro la información que estos maneja.
2. Funciones comunes
En PHP se utilizan las siguientes funciones de sesiones
- session_id ( [ CADENA ] ) devuelve CADENA
Obtiene/Fija el valor del 'id' de la sesión actual.
- session_cache_expire ( [ ENTERO ] ) devuelve ENTERO (minutos)
Obtiene/Fija el valor en minutos que tienen que pasar para que la sesión actual caduque.
La variable (PHP.INI->[Session]->session.cache_expire) contiene el valor por defecto indicado en minutos.
- session_cache_limiter ( [ CADENA ]) devuelve CADENA
Obtiene/Fija el valor de una variable que indica el nivel de caché que habrá en el cliente:
- nocache (valor por defecto)
- public
- private (puede confundir algunos navegadores)
- private_no_expire
- session_decode (CADENA) devuelve BOOL
Decodifica la CADENA en el formato de las sesiones de PHP, y introduce los valores en la sesión activa.
Al finalizar:
- Devuelve 'true' si la operación se ha realizado correctamente
- Devuelve 'false' si la ha habido algún tipo de error y por consiguiente no se ha podido introducir los valores en la sesión activa.
- session_destroy (nada)
Destruye las variables de sesión con sus valores
Al finalizar:
- Devuelve 'true' si la operación se ha realizado correctamente
- Devuelve 'false' si la ha habido algún tipo de error y por consiguiente no se han podido borrar los valores de la sesión
- session_encode (nada) devuelve CADENA
Devuelve una cadena con la sesión actual codificada, en el formato indicado en el apartado ¿Dónde y cómo se guarda la información de la sesión en php?
Esta cadena puede utilizarse para almacenar sesiones y mas tarde reusarlas con la función 'session_decode'
- session_is_registered (CADENA) devuelve BOOL
Devuelve TRUE si existe una variable (en la sesión actual) con el nombre CADENA
Devuelve FALSE en caso contrario
- session_name ( [ CADENA ] ) devuelve CADENA
Si se pasa como parámetro una cadena, modifica el nombre de de la sesión actual se cambia a este valor; si se define un valor debe de usarse antes de session_start () y session_register (), y hacerlo en cada petición.
- session_readonly (nada) devuelve nada
Inicia la sesión, pero con la particularidad de que al finalizar el script las variables de sesión se quedan como estaban, es decir, no se guardan los nuevos valores de la sesión.
- session_register ( MIXTO [, MIXTO …]) devuelve BOOLEANO
Registra una variable de sesión como tal, esta variable se puede acceder globalmente, por ello para acceder desde una función se debe de usar el comando global $variable;
Atención:
Si usas las arrays $_SESSION o $HTTP_SESSION_VARS, no uses las funciones session_register (), session_is_registered () y session_unregister (). Estas funciones devolveran VERDADERO cuando todas las variables se hallan registrado en la sesión. Si session_start () no ha sido llamada antes de usar esta función, se puede hacer una llamada a esta función sin parámetros para hacerlo. Puedes crear variables de sesión (tan bién) poniendo valores en las matrices $_SESSION (a partir de la versión 4.1) o en $HTTP_SESSION_VARS (antes de ésta versión)
- string session_save_path ( [ CADENA ] ) devuelve CADENA
Esta función permite obtener o definir el path del directorio dónde deben guardarse los ficheros de las sesiones.
- session_set_cookie_params ( INT [, path CADENA [, dominio CADENA [, n/seguro BOOL]]])
Cambia los parámetros de configuración para usar las cookies, éstos están definidos por defecto en el fichero PHP.INI
- session_set_save_handler ( string abrir, string cerrar, string leer, string escribir,
string destruir, string gc)
Define las funciones de usuario respecto a la sesión:
- Abrir ($save_path, $session_name) - (al abrir la sesión)
- Cerrar () - (al cerrar la sesión)
- Leer ($id) - (???)
- Escribir ($id, $sess_data) - (???)
- Destruir ($id) - (???)
- rb ($maxfiletime) - (Recolector de basura)
¿Cómo funciona y qué es el recolector de basura de las sesiones?
Esta función indica que funciones del usuario se deben de ejecutar en determinadas ocasiones. Ej:
function FCabrir ($path, $name) {
}
session_set_save_handler ("FCabrir" …);
session_start (nada) -> No devuelve nada
Inicializa la sesión:
- Crea una nueva sesión
o bien
- Continúa la anterior basandose en el session id pasado por GET o mediante una cookie). Carga las variables del fichero como globales y permite empezar a usar las funciones principales de sesión.
- Si estás usando sesiones basadas en las cookies, debes llamar a la función antes de que haya ninguna salida al navegador.
- session_start() registrará un manejador de salida interno para la reescritura de las URL's si trans-sid está activado. Si un usuario utiliza ob_gzhandler o algo como ob_start(), el orden del manejador de salida es importante para que la salida sea la adecuada. Por ejemplo, el usuario debe registrar ob_gzhandler antes de iniciar la sesión.
Nota: Se recomienda utilizar zlib.output_compression en lugar de ob_gzhandler
- session_unregister ( CADENA ) devuelve BOOLEANO
Quita de la sesión y destruye la variable indicada como parámetro.
Al finalizar:
- Devuelve true si se hizo correctamente
- Devuelve false si no se pudo eliminar
- session_unset (nada) devuelve nada
Destruye todas las variables de la sesión
- session_write_close (nada) devuelve nada
Finaliza la sesión actual y guarda sus datos
Los datos de la sesión se suelen guardar tras finalizar la ejecución de su script sin necesidad de llamar a session_write_close(), pero como los datos de la sesión están bloqueados para evitar escrituras concurrentes, sólo un script puede trabajar con una sesión a la vez. Cuando se usan framesets junto con sesiones, podrá comprobar que los frames se cargan uno a uno debido a este bloqueo. Puede reducir el tiempo necesario para cargar los frames finalizando la sesión tan pronto como haya terminado los cambios a las variables de la sesión.
Fuente:
https://luismido.wikidot.com/funciones-de-manejo-de-sesiones-en-php
Aporte Personal:
Es un poco complejo el manejo de sesiones pero a medida que se implementa es más comprensible y se entiente más su uso e importancia.
3. Creación de usuarios
Las cuentas de usuario son creadas para poder brindar acceso a diferentes personas con respecto a un mismo sistema informático. Generalmente un usuario posee su propia carpeta personal, permisos para ejecutar determinados programas y acceso limitado a determinada red informática (interna o externa) con todo lo que esto supone.
En Internet, los usuarios deben frecuentemente registrarse antes de poder acceder a un servicio. El registro se realiza por lo general mediante el ingreso de un nombre y una contraseña, aunque en determinados casos se solicita más información, la cual va a parar a una base de datos con determinada política de confidencialidad. También existen los usuarios anónimos, aunque hay que aclarar que los servidores Web registran las direcciones de IP desde las cuales son accedidos, por lo cual el anonimato existe sólo en potencia. Aporte personal:
Cada vez es más importante realizar diversos procesos que garanticen que quien utiliza el sistema es la persona indicada, que tenga los permisos indicados y realice la autenticación requerida, por tal motivo cada vez se está utilizando el registro del usuario cuando desea obtener una información de una página en especial.
Fuente:
https://www.ecured.cu/Usuario_(Inform%C3%A1tica)
Aporte personal:
Cada vez es más importante realizar diversos procesos que garanticen que quien utiliza el sistema es la persona indicada, que tenga los permisos indicados y realice la autenticación requerida, por tal motivo cada vez se está utilizando el registro del usuario cuando desea obtener una información de una página en especial.
4. Métodos de acceso
Hay dos procesos distintos que intervienen cuando se trata de permitir a un usuario acceder a páginas específicas de un sitio web. La autenticación es el proceso de identificación de un individuo sobre la base de sus credenciales (normalmente nombre de usuario y contraseña), y Autorización (control de acceso) es el proceso de decidir si el usuario tiene permiso para ejecutar algo o no.
El objetivo de la autenticación es decidir si alguien es quien dice ser. Hay tres formas de reconocer a un usuario, que se conocen como factores:
Algo que saben, como una contraseña o PIN
Algo que tienen, tal como una licencia de conducir o tarjeta de crédito
Algo que son, como las huellas digitales o la inserción de los patrones
La autorización, a menudo llamado control de acceso, se refiere a la gestión del acceso a los recursos protegidos y al proceso de determinar si un usuario está autorizado a acceder a un recurso particular. Por ejemplo, muchas aplicaciones web cuentan con recursos que sólo están disponibles para los usuarios autenticados, recursos que sólo están disponibles para los administradores, y los recursos que están disponibles para todos.
La causa predominante de las vulnerabilidades de control de acceso es el cuidado y la atención se dan a las secciones de una aplicación web que se utilizan menos. Algunas funciones administrativas y de control de acceso son a menudo una idea de último momento, y están escritas con un usuario autorizado en mente, sin considerar lo que un atacante podría intentar hacer. Un usuario autorizado es de una confianza mayor que la de un usuario anónimo, pero si sus funciones administrativas están disponibles a través de una dirección URL pública, son un atractivo blanco para un atacante. En estos casos, la negligencia es el principal enemigo.
Fuente:
Aporte personal:
Los metodos de acceso permiten autenticar o verificar el usuario para ingresar a determinada parte de la aplicación
5. Cierre de sesión
Cerrar sesión es la acción de terminar una sesión de un usuario específico, finalizando así el uso de un servicio o sistema. Es la acción inversa de iniciar sesión.
Sinónimos: logging out, log out, sign out, sign off, desidentificarse.
Una sesión puede cerrarse voluntariamente cuando así el usuario lo solicite, sin necesidad de colocar nuevamente nombre de usuario y contraseña.
Pero también la acción de cerrar de sesión puede ser automática. En general, cuando transcurre un determinado período de tiempo sin actividad, la sesión se cierra automáticamente por cuestiones de seguridad, esto sucede especialmente en homebanking.
Una sesión también puede terminarse si el sistema de seguridad sospecha del usuario que ha iniciado sesión, especialmente si hace actividades fuera de lo normal.
Fuente:
https://www.alegsa.com.ar/Dic/cerrar_sesion.php
6. Encriptación de contraseñas
Uno de los métodos más seguros y extendidos en el desarrollo de aplicaciones es almacenar las contraseñas encriptadas. Para ello, existen funciones creadas con el objetivo de transformar cualquier cadena de datos en otra totalmente diferente. Son las llamadas funciones criptográficas hash o más conocidas como “hash“.
El “hasheo” de datos consiste en aplicar un algoritmo a una cadena de entrada para obtener una nueva de longitud fija. Es decir, sea cual sea la longitud de entrada, la función devolverá una serie de la misma longitud.
Las funciones hash más conocidas en el desarrollo se software son MD5 y SHA1. La primera devuelve una cadena de 32 caracteres y a segunda de 40. No obstante, los algoritmos empleados en ellos se han quedado obsoletos y ya no son seguros, ya que con la potencia que poseen los ordenadores hoy en día se puede fácilmente revertir el algoritmo para desencriptar los datos.
Fuente:
https://www.conasa.es/blog/seguridad/como-almacenar-contrasenas-seguras-en-php/
Aporte personal:
Es responsabilidad de cada programador encontrar el formato mas fuerte para cifrar las contraseñas de modo que sea dificil o casi imposible su decodificacion para los hackers.
Roles
Que son los roles
Grupos o roles, La mayoría de los sistemas de administración de bases de datos proporcionan formas para que el administrador de bases de datos agrupe a los usuarios según las necesidades de acceso a los datos y asigne privilegios al grupo. Esto reduce el tiempo dedicado a modificar los privilegios individuales de cada usuario y simplifica la administración de grandes números de privilegios para grandes números de usuarios. Por lo tanto, puede utilizar grupos (también denominados roles, tipos, o autoridades, según el sistema de administración de bases de datos) que otorguen derechos a los usuarios de acuerdo con las funciones comunes.
Las categorías o los grupos de usuarios comunes son los que visualizan los datos, los que editan los datos y los que crean lo datos.
En la mayoría de los casos, otorgar derechos a grupos no impide otorgar derechos a usuarios individuales en geodatabases corporativas. Por ejemplo, puede otorgar los privilegios mínimos necesarios para crear datos en la base de datos para el grupo que crea datos (que puede incluir al administrador de la geodatabase) y otorgar privilegios adicionales sólo al usuario administrador de la geodatabase. Sin embargo, cada sistema de gestión de bases de datos trata la precedencia de privilegios de forma distinta, así que deberá consultar la documentación de su sistema de administración de bases de datos para ver los detalles del comportamiento de los privilegios asociados a los roles y los usuarios individuales.
Fuente: https://desktop.arcgis.com/es/arcmap/10.3/manage-data/gdbs-in-sql-server/user-accounts-groups.htm
Tipos de permisos
Usuarios roles y permisos
Un punto crítico en los gestores de contenidos es el de los permisos y es importante disponer de algún mecanismo que permita establecer que operaciones podrá realizar cada usuario. El objetivo es evitar que, por accidente o de forma intencionada, un usuario pueda realizar operaciones que comprometan la integridad y funcionamiento del sitio web. Para este fin, Drupal utiliza un sistema de roles, permisos y usuarios.
Entendemos por usuario a cualquier persona que accede al sitio web. Los usuarios se pueden agrupar en roles en función de las operaciones que se les permite realizar. Es decir, que cada rol se caracteriza por disponer de una serie concreta de permisos. Se entiende por permiso la posibilidad de ejecutar determinadas operaciones o no sobre los diferentes elementos del CMS.
En Drupal los roles se pueden gestionar (crear, destruir o modificar) en "Administer>User managment>Roles". Para gestionar los permisos asociados a cada Rol deberemos ir a "Administer>User managment>Permisions". Luego para especificar que tareas se permitirán a cada usuario, bastará con asignarle un Rol a cada uno de ellos.
Fuente: https://www.cursosdrupal.com/content/usuarios-roles-y-permisos
Construcción de modelo de permisos de acceso
- El invitado, que es aquel que llega a la página pero no se identifica como usuario registrado (miembro de la comunidad) y que solamente puede ver unos contenidos restringidos.
- Los miembros de la comunidad que se identifican como tales mediante un nombre y una contraseña en la página de inicio, y que pueden añadir noticias, nuevos enlaces a páginas, ver y subir fotos, leer los foros y participar en ellos, acceder a documentos almacenados en el portal, etc.
- Usuarios Registrados, son aquellas personas que han creado usuarios en el sitio web y podrán acceder a contenidos especiales. Adicionalmente tienen la posibilidad de colaborar con nuevos documentos a la biblioteca virtual, eventos al calendario de actividades y personas o instituciones al directorio.
- Los administradores, que pueden añadir módulos con nuevas funciones, actualizar el portal, dar de alta o baja a usuarios, etc.
Existen otros perfiles de usuario pero que ahora no se utilizan, y que serían personas que pueden escribir una noticia, pero pendiente de la aprobación por un supervisor que lo revisa, o distintas categorías de administradores.
Fuente:
https://www.ecured.cu/Usuario_(Inform%C3%A1tica)
Aporte Personal:
En general la base de un buen sistema depende del tiempo que tome para asegurar la información que se maneja en ella, las sesiones, los permisos y los roles contribuyen a que esta parte sea más facil al momento de crear un aplicacion.
ejemplo práctico para el manejo de sesiones: Registro y Login Sencillo con PHP y Mysql
https://www.dropbox.com/s/4k24fmuyxqcyngw/sesionesE.zip?dl=0
Leer más: https://sistemasremington.webnode.com/informatica2/progrmacion-web-ii/actividades/sesiones/
6. Encriptación de contraseñas
Roles
Que son los roles
Tipos de permiso
Construcción de modelo de permisos de acceso
Ejemplo práctico para el manejo de sesiones: Registro y Login Sencillo con PHP y Mysql
https://www.dropbox.com/s/4k24fmuyxqcyngw/sesionesE.zip?dl=0
Leer más: https://sistemasremington.webnode.com/informatica2/progrmacion-web-ii/actividades/sesiones/