martes, 27 de septiembre de 2011

Sistemas de seguridad para desarrollo WEB

Problemas principales en la Programación de Sistemas Web
Una gran parte de los problemas de seguridad en las aplicaciones web son causados por la falta de seguimiento por parte del programador en los siguientes aspectos:
  • Entradas al sistema
  • Salidas del sistema

Practicas básicas de Seguridad Web

Balancear Riesgo y Usabilidad
Si bien la usabilidad y la seguridad en una aplicación web no son necesariamente mutuamente excluyentes, algunas medidas tomadas para incrementar la seguridad con frecuencia afectan la usabilidad. Al igual que debemos pensar en las maneras en que usuarios ilegítimos nos pueden atacar, también debemos considerar la facilidad de uso para los usuarios legítimos.
La recomendación inicial sería tratar de usar medidas de seguridad que sean transparentes a los usuarios. Por ejemplo, la solicitud de un nombre de usuario y una contraseña para registrarse en un sistema son procedimientos esperados y lógicos por parte del usuario, con una matriz de acceso es un Modelo simple y preciso para describir, especificar los estados de protección de un sistema (SO, BD).

se deben identificar parámetros de inicio de sesión
– ID, certificado del otro, método de compresión, 
especificación del cifrado, clave secreta maestra, se puede 
reanudar.

• Parámetros de conexión:
– Calor aleatorio de cliente y servidor, servidor escribe 
clave secreta MAC, cliente escribe clave secreta MAC, 
cliente escribe clave, IV, número de secuencia.

Rastrear el paso de los Datos
La medida más importante como desarrollador preocupado por la seguridad que podemos tomar es mantener conocimiento de los pasos que ha recorrido la información en todo momento. Conocer de donde vinieron los datos y hacia donde van. En muchas ocasiones lograr esto puede ser complicado, especialmente sin un conocimiento profundo de como funcionan los sistemas Web.
En las aplicaciones web, existen maneras de distinguir los orígenes de los datos y poder así reconocer cuando los datos pueden ser dignos de confianza y cuando no. Ante todo, debemos recordar que la desesperación y la paranoia con mucha frecuencia nos dirigen a complicaciones y errores, usando una transición de estados de protección, y en la base de datos disparadores guardándolas en bitácoras.

Filtrar Entradas
El filtrado es una de las piedras angulares de la seguridad en aplicaciones web. Es el proceso por el cual se prueba la validez de los datos. Si nos aseguramos que los datos son filtrados apropiadamente al entrar, podemos eliminar el riesgo de que datos contaminados y que reciben confianza indebida sean usados para provocar funcionamientos no deseados en la aplicación.
El proceso de filtrado debe estar conformado por los siguientes pasos:
  • Identificar la entrada.
  • Filtrado de la entrada.
  • Distinguir entre datos que ya han pasado por el filtro y los que no.
Por lo general, se considera más seguro tratar a los datos provenientes de bases de datos como entradas, aunque supuestamente sean bases seguras y en las que debiéramos tener confianza, esto se debe a que es mejor tener redundancia para evitar problemas en el caso de que la base de datos fuera vulnerada.
Existen además muchos puntos de vista diferentes sobre como realizar el filtrado o proceso de limpieza. Lo que usualmente se recomienda es ver al filtrado como un proceso de inspección, no debemos tratar de corregir los datos, es mejor forzar a los usuarios a jugar con las reglas válidas.
Otro aspecto a considerar en el proceso de filtrado es el uso de listas blancas, listas negras o una combinación de ambas.
Al usar listas blancas asumimos que los datos son inválidos a menos que prueben ser validos al encontrarse patrones coincidentes en la lista blanca. Una limitante de usar este punto de vista es considerar inválidos datos que debieron considerarse válidos pero que no fueron tomados en cuenta patrones similares al construir la lista blanca. Dentro de todo, cometer un error de este tipo es preferible que considerar válidos datos que no debieron considerarse así.

Una vez concluido el paso del filtrado solo resta usar convenciones apropiadas en el nombramiento de las variables para poder distinguir las que ya han sido filtradas. Una recomendación sería guardar las variables que ya hayan sido filtradas en un arreglo de fácil identificación (como $limpio), ademas requieriendo claves de cifrado y autentificación:
La captura de una clave no debe de dar acceso a todos los datos, solo a los datos protegidos por esa clave y claves no derivadas de sus predecesoras


Escapar salidas
Otra piedra angular de la seguridad en aplicaciones web es el proceso de escapado y su contraparte para codificar o decodificar caracteres especiales de tal forma que su significado original sea preservado.
El proceso de escapado debe estar compuesto a su vez por los siguientes pasos:
Identificar las salidas. Escapar las salidas. Distinguir entre datos escapados y noescapados.
Para escapar las salidas, primero debemos identificarlas. En PHP una forma de identificar salidas hacia el cliente es buscar por líneas como:
echo
print
printf
<?=
Además debemos considerar otro tipo de salidas como los datos que son enviados a otros sistemas como bases de datos, etc. El proceso de escapado debe adecuarse al tipo de salida de que se trate (si es al cliente, a la base de datos, etc.). Para la mayoría de los destinatarios, existen funciones nativas en PHP para esta finalidad.
La salida más común es el cliente, y para él existe en PHP la función htmlentities() que probablemente es la mejor función para escapar este tipo de salidas. Una recomendación adicional con respecto esta función es especificar los parámetros opcionales apropiados con la codificación de carácter empleada en la cabecera de la aplicación (Content-Type).
Para distinguir entre los datos que han sido escapados de los que no es recomendable también usar una convención de nombres. Para el caso de contenido escapado con la función htmlentities() se puede usar un arreglo en especial al que podríamos llamar $html.
Otro destinatario común son las bases de datos, sin embargo cada tipo de manejador (MySQL, PostgreSQL, etc.) puede presentar sus detalles, por lo que es necesario una función de escapado apropiada para cada caso. Para los usuarios de MySQL, la función recomendada es mysql_real_escape_string().

Referencias de Internet:

sábado, 3 de septiembre de 2011

Modelos Conceptuales de Bases de datos

[olap_wuerfel.jpg]Una base de datos multidimensional, es aquella que almacena sus datos con varias dimensiones, es decir que en vez de un valor, encontramos varios dependiendo de los "ejes" definidos. Veamos un ejemplo:


Una tabla relacional de productos podría tener 2 campos ID, Nombre del producto y existencias
En un entorno multidimensional con dos dimensiones, tiempo y espacio, tendríamos por cada entrada N valores dependiendo de estos dos ejes y asi podríamos observar el número de existencias en el tiempo (histórico) y en las diferentes sedes de la empresa.

IMPLEMENTACIÓN

Lo más importante a tener en cuenta para implementar esta estructura de datos es que la tabla contiene todas las n-tuplas, con los valores de las dimensiones, o índice del cubo, y los valores de las métricas previamente calculados para el cruce de valores del índice en cuestión.


CUBO
El esquema de un cubo queda determinado dando a conoces sus ejes con sus respectivas estructuras y los datos que se presentan en cada celda de la matriz.

Se asume que los datos en todas las celdas son uniformes, es decir, todas las posiciones de la matriz tienen datos de igual estructura.

A los ejes se le llama dimensiones y al dato que se presenta en la matriz, se le llama medida. A los elementos del producto cartesiano de los ejes (dimensiones ), se le llama coordenadas. La matriz definida puede ser dispersa. (es una función parcial).

Hipercubo de datos

Un hipercubo dentro del ámbito de sistemas de información y bases de datos, significa un objeto multidimensional, en el que cada dimensión representa una variable, de forma que en este objeto se obtienen los valores relacionados de todas variables, asociadas a las dimensiones, simultáneamente.


Los datos se modelan en data cubes (cubos de datos), estructuras multidimencionales (hipercubos), cuyas operaciones más comunes son:

Roll up: incremento de nivel de agregación de los datos.
Drill Down: incremento en el nivel de detalle, opuesto al Roll up.
Slice: reducción de la dimensionalidad de los datos mediante selección.
Dice: reducción de la dimensionalidad de los datos mediante proyección.
Pivotaje o rotación: reorientación de la visión multidimencional de los datos.


 

Bases de Datos Lógicas

Las bases de datos lógicas son construidas con registros homogéneos de manera parecida a las relacionales. Adicionalmente se agregan restricciones lógicas y reglas de composición parecidas a las de Prolog, que permiten (en principio) deducir información que originalmente no está contenida en la base de datos. Un ejemplo para demostrar las reglas y relaciones de una base de datos lógica se puede ver a continuación: 


Tenemos la relación Padre y la regla Abuelo,



Padre(Juan, Luis)
Padre(Luis, Arturo)
Abuelo (x,y):- Padre(x,z),Padre (z,y).



Una consulta típica consiste en preguntar si un registro ``podría'' existir, por ejemplo

  • Abuelo(Juan,Luis) la respuesta sería no
  • Padre(Juan,Luis) la respuesta sería si
  • Padre(Luis,Luis) la respuesta sería no

Bases de datos paralelas

Se suele duplicar la información de una organización. En cambio, es mucho más realista tener varios servidores de bases de  datos e ir añadiendo a  medida que la organización necesita más capacidad. Esto se debe hacer de manera que los usuarios crean que siguen trabajando con un único sistema, el sistema integrado de la organización. Mediante esta filosofía, la
organización tiene más flexibilidad en sus ampliaciones, se realizan de una manera menos traumática y con ordenadores de talla media, que suelen ser mucho más baratos que uno grande equivalente en potencia.



Bases de datos Semánticas
ofrecen una flexibilidad muy apropiada para proyectos web (no sólo “3.0”). Y el mejor ejemplo que he encontrado es Plone, el gestor de contenidos para portales web basado en Zope, permite crear archetypes de información que Zope/ZODB manejan de forma semi-automática, permitiendo
extender el portal rápidamente.

EJEMPLOS

Web 3.0 es un neologismo que se utiliza para describir la evolución del uso y la interacción en la red a través de diferentes caminos. Ello incluye, la transformación de la red en una base de datos, un movimiento hacia hacer los contenidos accesibles por múltiples aplicacionesnon-browser, el empuje de las tecnologías de inteligencia artificial, la web semantica, la Web Geoespacial, o la Web 3D. Frecuentemente es utilizado por el mercado para promocionar las mejoras respecto a la web 2.0. El término Web 3.0 apareció por primera vez en 2006 en un artículo de Jeffrey Zeldman, crítico de la Web 2.0 y asociado a tecnologias como AJAX.

OLAP es el acrónimo en inglés de procesamiento analítico en línea (On-Line Analytical Processing). Es una solución utilizada en el campo de la llamada inteligencia empresarial (o Business Intelligence) cuyo objetivo es agilizar la consulta de grandes cantidades de datos. Para ello utiliza estructuras multidimensionales (o Cubos OLAP) que contienen datos resumidos de grandes Bases de datos o Sistemas Transaccionales (OLTP). Se usa en informes de negocios de ventas, marketing, informes de dirección, mineria de datos y áreas similares.

viernes, 26 de agosto de 2011

resumen de ODMG

Definición ODMG –ObjectDatabaseManagementGroup, aparece en el año 2000 y este permite que tanto los diseños como las implementaciones sean portables.
este tiene un modelado de objeto que son: 
Objetos y literales se categorízan en tipos
–Los tipos de objetos pueden tener comportamiento 􀃆Clase
      •Los objetos saben realizar sus operaciones
      •Los objetos tienen propiedades 
  • Son Atómicos y estructurados, con colecciones.
--Las literales:
•No tienen identificadores
•No pueden aparecer como objetos, están embebidos en ellos
•No se pueden referenciar de modo individual
    los tipos son:
           Atómicos, Colecciones, Estructurados y Nulos.

Los tipos tienen una interface y una clase.
las interfaces contienen:
     Especificación del comportamiento abstracto de un tipo de objeto y contiene las signaturas de las operaciones.
    Puede tener propiedades (atributos y relaciones) como parte de su especificación, éstas no pueden ser heredadas desde la interface.
   No es instanciable por lo que no se pueden crear objetos a partir de ella (es el equivalente de una clase abstracta en la mayoría de los lenguajes de programación).

las clases son:
         Especificación del comportamiento abstracto y del estado abstracto de un tipode objeto
         Instanciables, por lo que a partir de ellas se pueden crear instancias de objetos individuales (es el equivalente a una clase concreta en los lenguajes de programación)
       El estándar soporta la herencia simple y la herencia múltiple mediante las interfaces.

                    •Ya que las interfaces no son instanciables, se suelen utilizar para especificar operaciones
abstractas que pueden ser heredadas por clases o por otras interfaces. A esto se le denomina herencia de comportamiento y se especifica mediante el símbolo “:”
                    •La herencia de comportamiento requiere que el supertiposea una interface, mientras que el subtipo puede ser una clase o una interface.


Propiedades
•Atributos
      –Se define del tipo de un objeto.
      –No tiene identificador.
      –Valores: literal o OID.
•Relaciones
     –Se definen entre tipos.
     –Solo relaciones binarias 1:1, 1:n, n:m.
     –No tiene nombre.
     –Define caminos transversales en la interfaceen cada dirección (set, bago listen el lado de m).
     –Integridad mantenida por SGBD.
    –form añade miembros a una relación.
   –drop elimina miembros a una relación.

Transacciones
     •son unidades lógicas de trabajo que dejan la BD en estado consistente
     •tienen secuencia lineal que se ejecutan de modo controlado
     •Concurrencia
    •Todas las operaciones sobre objetos persistentes se realizan dentro de una transacción
    •Control de transacciones

Lenguajes de definición de objetos: 
ODL
            •Es el equivalente a DDL de los SGBDR
            •Define
                    –Atributos    
                    –Relaciones entre tipos
                    –Signatura de operaciones
             •Extiende de la definición de interfaces IDL de CORBA


 OQL
           •Lenguaje declarativo similar a SQL
           •Basado en SQL-92
                  –Superconjuntode SELECT
           •No modifica estado de los objetos
                 –Se hace mediante los métodos
                       SELECT …FROM …WHERE …



Fuentes de internet: