Herramientas Informaticas

Mes: noviembre 2012 Página 1 de 2

MDP

1. ¿Qué significan las siglas MDB?

Message Driven Bean

2. ¿En qué consiste el funcionamiento de los MDB?

Este servicio funciona a través de colas de mensajes, que es donde los clientes envían sus peticiones, y estas colas son controladas por los Message Driven Beans, los cuales procesan los mensajes que hay en ellas y ejecutan ciertos servicios dependiendo del mensaje procesado.

3. ¿Cuál es el ciclo de vida de un MDB?

Para evitar errores de programación, un message-driven bean no puede ser ejecutado por más de un thread a la vez. Por esta razón y además por no guardar estados, el container puede crear un pool de este tipo de beans similar al existente para stateless session beans.

Debido a su naturaleza stateless el ciclo de vida de un message-driven es simple. Cuando el container desea agregar un nuevo message-driven bean al pool debe crear una nueva instancia, asignar el contexto para que obtenga parámetros de sistema y finalmente ejecutar el método ejbCreate(). Después el bean se encuentra en capacidad para recibir y procesar mensajes. Cuando el container decide reducir el número de instancias existentes invoca el método ejbRemove() terminando su ciclo de vida. Ver figura.

clip_image001

Figura 3.9: Ciclo de vida de un message-driven bean

Debido a su reducido tiempo de vida y a la no persistencia de sus datos, un message-driven bean no sobrevive a fallas en el container o en el servidor, debiendo ser reinstanciado para continuar recibiendo mensajes luego de ésta.

4. ¿Cuál es la diferencia entre MDB y Beans Sesión?

La diferencia más visible entre beans controlados por mensajes y beans de sesión es que los clientes no tienen acceso a beans controlados por mensajes a través de interfaces. Las interfaces se describen en la sección de acceso de cliente Definición de Interfaces . A diferencia de un bean de sesión, un bean controlado por mensajes tiene sólo una clase de Bean.

En varios aspectos, un bean controlado por mensajes asemeja a un bean de sesión sin estado.

  • A instancias bean controlado por mensajes de retener ningún dato o el estado de conversación para un cliente específico.
  • Todas las instancias de un bean controlado por mensajes son equivalentes, permitiendo que el contenedor EJB para asignar un mensaje a cualquier instancia del bean controlado por mensajes. El recipiente puede agrupar estos casos para permitir flujos de mensajes que se procesan simultáneamente.
  • Un solo bean controlado por mensajes puede procesar mensajes de varios clientes.

5. ¿Cómo se usa un MDB?

Los beans de sesión le permiten enviar mensajes JMS y recibirlos de forma sincrónica, pero no de forma asíncrona. Para evitar la inmovilización de los recursos del servidor, no usar el bloqueo sincrónico recibe en un componente del lado del servidor, y en general los mensajes JMS no deben ser enviados o recibidos de forma sincrónica. Para recibir mensajes de forma asincrónica, utilice un bean controlado por mensajes.

6. ¿Cuáles son las características de los MDB?

Beans controlados por mensajes con las siguientes características:

· Ejecutan a la recepción de un mensaje único cliente.

· Se invoca de forma asincrónica.

· Ellos son relativamente de corta duración.

· Ellos no representan directamente los datos compartidos en la base de datos, pero pueden acceder y actualizar estos datos.

· Pueden ser consciente de transacción.

· Ellos son apátridas.

Qué es el middleware orientado a mensajes

¿Qué es el middleware orientado a mensajes (MOM)?

Middleware orientado a mensajes (MOM) es software o hardware que soporta la infraestructura de envío y recepción de mensajes entre sistemas distribuidos. MOM permite a los módulos de aplicación que se distribuye a través de plataformas heterogéneas y reduce la complejidad del desarrollo de aplicaciones que abarcan múltiples sistemas operativos y protocolos de red. El middleware crea una capa de comunicaciones distribuida que aísla el desarrollador de la aplicación de los detalles del sistema operativo y varias interfaces de red. API que se extienden a través de diversas plataformas y redes suelen ser proporcionada por MOM.

MOM proporciona elementos de software que residen en todos los componentes se comunican de una arquitectura cliente / servidor y suelen admitir llamadas asíncronas entre las aplicaciones cliente y servidor. MOM reduce la participación de los desarrolladores de aplicaciones con la complejidad de la naturaleza maestro-esclavo del mecanismo cliente / servidor.

¿Cuál es el propósito principal o funciones de middleware orientado a mensajes?

MOM es principalmente middleware que facilita la comunicación entre las aplicaciones distribuidas. Mientras MOM admite mensajería síncrona y asíncrona, que está más estrechamente identificado con la mensajería asincrónica mediante colas. MOM envía mensajes de una aplicación a otra utilizando una cola como un paso intermedio. Mensajes del cliente se envían a una cola y permanecer allí hasta que son recuperados por la aplicación de servidor. La ventaja de este sistema es que el servidor de aplicaciones no necesita estar disponible cuando el mensaje es enviado, en su lugar, el servidor puede recuperar el mensaje en cualquier momento. Además, ya que los mensajes pueden ser recuperados de la cola en cualquier orden, MOM también puede facilitar la recuperación de mensajes utilizando esquemas de prioridad o de balanceo de carga. MOM también puede proporcionar un nivel de tolerancia a fallos utilizando colas persistentes que permiten que los mensajes se recuperó cuando el sistema falla.

De acuerdo con un octubre de 1996, artículo en InfoWorld por Julie Bort, “Queue Server es una opción popular para los procesos donde cada paso es dependiente de la anterior, es también muy adecuado para aplicaciones diseñadas para la comunicación de fondo donde hay interacción directa del usuario es involucrados “. Muchos otros analistas describen la importancia de MOM en el apoyo a las aplicaciones heredadas y los sistemas dispersos.

¿Cómo se diferencia de otro tipo de middleware?

Middleware es la amplia gama de servicios en capas entre las aplicaciones y un sistema operativo que proporcionan servicios especializados y la interoperabilidad entre las aplicaciones distribuidas. Por una variedad de razones, incluyendo el hecho de que el middleware es una categoría relativamente nueva de software, la funcionalidad de los diferentes tipos de middleware no está estandarizada. Por ejemplo, la función primaria de middleware de procesamiento de transacciones tiene que ver con el control, pero muchos de los productos de procesamiento de transacciones también incluyen servicios de comunicación. Proveedores de middleware añadir funciones de garantizar que sus productos interactuar con una variedad de hardware y software, y para ayudar a diferenciar su producto de los competidores.

Debido a que cada producto dentro de una categoría de middleware incluye una variedad de funciones y porque las funciones “estándar” dentro de cada categoría cambian rápidamente, las distinciones útiles entre los servicios de middleware son difíciles de encontrar. Sin embargo, la siguiente es una de las muchas maneras de clasificar los productos de middleware que hemos encontrado útil. Tenga en cuenta que esta no es una lista completa de servicios de middleware.

Presentación Prestaciones: Formas gerente, gerente de gráficos, enlazador hipermedia, y administrador de impresión.

Servicios: Comunicación Peer-to-peer de mensajería, llamada a procedimiento remoto, paso de mensajes, colas de mensajes, correo electrónico e intercambio electrónico de datos.

Servicios de Control: administrador de subprocesos, administrador de transacciones, corredor de los recursos, de grano fino petición del planificador y de grano grueso Programador de tareas.

Servicios de Información: servidor de directorio, gerente de registro, administrador de archivos, gestor de registro, el sistema de base de datos relacional orientada a objetos de base de datos del sistema y gestor de repositorio.

MOM se inscribe en el middleware de servicios de comunicación y por lo general incluye el paso de mensajes y colas de mensajes. Muchos productos también soportan llamadas a procedimientos remotos, así como servicios de directorio.

¿Cuál es la diferencia entre los servicios de comunicación Momand otros?

MOM admite mensajes y por lo tanto se ha diseñado principalmente para apoyar la comunicación diferida mientras peer-to-peer y las llamadas a procedimiento remoto (RPC) están diseñados para soportar la comunicación síncrona. En RPC, el servidor receptor debe estar disponible para aceptar mensajes enviados. Si el servidor es baja, el mensaje no se puede entregar en ese momento. MOM, por otro lado, puede enviar mensajes a los servidores que están abajo sin tener que volver a enviarlo. Mensajes en un sistema de MOM se colocan en una cola y recuperar siempre que el servidor lo solicite. Si el servidor está disponible en el momento en que se envía el mensaje es irrelevante.

Web Service

Sin ttulo

1. ¿Definición del autor acerca de un web service?
Los servicios Web son una arquitectura de computación distribuida que ofrece el uso de aplicaciones de acoplamiento flexible que realizan servicios de unos por otros. Disponen de una nueva manera de realizar programa a programa de comunicaciones que permiten que las aplicaciones se comuniquen entre sí con independencia de que se usó idioma de la aplicación para crear una aplicación-y con independencia de qué plataforma de sistemas y el entorno operativo se está utilizando.
2. Define el funcionamiento de los web service a través de sus elementos
Otra manera de definir qué servicios web hacer: Considere la posibilidad de publish, find y Bind
Aquí hay otra manera de entender cómo funcionan los servicios Web. Directorios de servicios Web y protocolos esencialmente tres funciones: publicar, buscar, y se unen. Para utilizar los servicios Web, las aplicaciones son:
Publicado en común un directorio UDDI (de tal manera que las aplicaciones cooperantes pueden encontrar entre sí);
Encontrado (utilizando protocolos WSDL que pueden localizar las aplicaciones de servicios Web y determinar si dichas aplicaciones pueden trabajar con la aplicación de origen), y
bind (un enlace de comunicaciones entre las dos aplicaciones se establece, por lo que un servicio, tales como la realización de algún tipo de cálculo o transacción puede representarse mediante los protocolos SOAP).
3. Describe la arquitectura de los web service?

XML: Mecanismo usado por un web service para indicar la forma en que deben ser suministrados los datos de manera que cualquiera pueda interactuar con el mismo, por medio de lenguaje XML.
WSDL: La información anterior se guarda en el archivo WSDL (Web Service Description Languaje) el cual contiene un documental XML Junto con la descripción de ciertos mensajes SOAP y de come deben manejarse, así como donde se encuentra el recurso del servicio y que protocolo debe usar el consumidor de este.
Protocolos: Protocolo de comunicación es SOAP generalmente, además de usar protocolos comúnmente conocidos como TCP/IP, HTTP, XML.

JUEGO CHOCOMILK REVANGE

   Dibujo

Historia

Es miércoles por la mañana cuando un grupo de jóvenes se va a desayunar a la fonda de la esquina, y todos piden chocomilk con plátano y diferentes platillos, una vez terminado la alumna RUBI se va sin pagar el chocomilk, dejando a pagar a la Martina pero este no quiso pagar y le echo la culpa al joven guapo Julio, que pagara, este se enojo y enfureció se transformo en Súper  Saiyajin uso el Jutso Clones de sombra y empezo a buscar a RUBI para ponerla a lavar platas en la fonda por que si no el paga.
Empieza a disfrutar esta épica aventura y no dejes que te atrape, véncelo aventándole bolitas de poder DESCARGALO Y VENCE PARA NO PAGAR EL CHOCOMILK
Los personajes y la historia son ficticios cualquier parecido con la realidad es mera coincidencia
CONTROLES:

Con las flechas se mueve y con el espacio dispara

Al parecer hay un ciclo infinito con windows vista y 7 , abran el admin de tareas, y terminen el proceso de javaw

DESCARGAR

Función PHP que cuenta el numero de filas en una consulta

php-logo

Para obtener estadísticas necesitamos el numero de filas de una consulta, ejemplo, numero total de usuarios activos etc.

A continuación les dejo la función que obtiene el numero de filas de una consulta

Supongamos que el archivo se llama consulta.php y esta en la carpeta modelo

//LOS VALORES QUE PONDRIAMOS AQUI SERIA EL CAMPO Y LUEGO EL DATO CON EL QUE QUEREMOS COMPARAR

function datoBuscar($campo,$dato){

    

    include ("configuracion.php");

    $enlace = conectar_mysql($servidor,$usuario,$contra,$bd);

        

    $alumnos = "SELECT $campo FROM vmlzj_comprofiler WHERE $campo='$dato'";

    $resultado = mysql_query($alumnos,$enlace);

        

    $numeroFilas = mysql_num_rows($resultado);

        

    return $numeroFilas;

}

Para mandarlo llamar seria de la siguiente manera

 

<?php 

include ("conexionmysql.php");

//SE INCLUYE EL ARCHIVO

include ("modelo/consultas.php");

 

$egreT = datoBuscar("campo","datoAcomparar"); 

 

 

?>

Les dejo también la función de conectar_mysql()

<?php

/*******************************************************************************************************************

*                             DESCRIPCION: ESTE ARCHIVO TIENE LA FUNCIONDE CONECTAR CON LA BASE DE DATOS.             *

*                             PROGRAMADOR:                                                                         *

*                             FECHA:          01/07/2012                                                               *

********************************************************************************************************************/

 

function conectar_mysql($direccion,$usuario,$password,$basededatos)

    {

    global $enlace;

    if(!($enlace=mysql_connect($direccion,$usuario,$password)))

        {

        echo " alert('error de conexion')";

        exit();

        }

    if(!(mysql_select_db($basededatos,$enlace)))

        {

        echo " alert('error al conectar con la base de datos')";

        exit();

        }

    return $enlace;

    }

?>

PACK DE ESCENARIOS PARA AGE OF EMPIRES II THE CONQUERORS

BUEN DIA AMIGOS!!!! Estaba recordando los buenos tiempos de la secundaria cuando yo y mis amigos nos las pinteábamos para ir al MUNDONET “Ciber Cafe” de che ríos, para aventarnos una partidilla de Age Of Empirers.

Bueno a todo esto les quiero dejar algo que encontré entre mis respaldos de una vieja, de una vieja computadora que prendí y me trajo recuerdos :’), les dejo el pack de escenario con los cuales jugamos en línea allá en aquellos tiempos, espero y lo disfruten si es que aun las nuevas generaciones siguen jugando este espectacular juego.

A continuación viene la lista de escenarios

() jose i tincho.scx
(DD) Infantery Hell Blood V1.scx
(HG)CBAV11.scx
(HG)CBAV12.scx
(IGZ)   CBAV12.scx
(IGZ)  CBA V12.scx
(IGZ)  CBAV12 (Con banderas).scx
(IGZ)  CBAV12.scx
(IGZ)  CBAV13.scx
(IGZ) CBA   V12.scx
(IGZ) CBA  V12.scx
(IGZ) CBA 13,5.scx
(IGZ) CBAV10.scx
(IGZ) CBAV12 .scx
(IGZ) CBAV12.scx
(IGZ) CBAV12_AOC.scx
(IGZ) CBAV13 .scx
(IGZ) CBAV13.scx
(IGZ) CBAV9.scx
(IGZ) Defend The Empire.scx
(IGZ) GwarzV2.scx
(IGZ) Path Blood Heroes.scx
(IGZ) Rambit CBG NoS AD.scx
(IGZ) Smosh V14.scx
(IGZ) Veteran BloodV6.scx
(IGZ) Veteran BloodV8.scx
(IGZ)CBAV12.scx
–   UDP_PRISON_BREAK_.scx
– Path BlooD HerooeS -.scx
– °-°Gods Path Blood~Aldeano~Oficial°-°.sc
-┼-InfanteryHellBloodOficial-┼-.scx
11111111111.scx
=V= CBA.scx
@-+-Harry Potter III  RPG version 1.3.scx
@-+-Harry Potter III  RPG version 1.3a.scx
@–+–Harry Potter III RPG version 1·5.scx
@-Harry potter III RPG version 8.50-@.scx
Ancient – [TD]- new version Medios 2k.scx
Carrera de Obstaculos.scx
Castle Blood II Auto-vNBv3.scx
Castle Norte vs Sur.scx
Ciudades Divididas.scx
default0.scx
deStRuYe  La MaLdiTa ToRRe _V_4.0.scx
dEStRuYe La  MaLdIta ToRRe _V_4.0.scx
deStRuYe La MaLdIta ToRRe _V_4.0.scx
deStRuYe La MaLdIta ToRRe _V_4.0.scx
EXCALIBUR IV (Official).scx
Green Arabia.scx
Guerra del pacifico.scx
Infantery Hell Blood V1.scx
jose.scx
JOSE2.scx
KING MOVES Green Fix-vNBv3.scx
lol xd.scx
manu.scx
masacre_infinita.scx
Masakre Infinita v. Oficial. 5 min.scx
nomada.scx
Path Blood  Heroes 4-8.scx
Path Blood Heroes  2008.scx
Path Blood Heroes 4-8.scx
PTO BlueSea v4,2.scx
PTO PolarExpress v5,1.scx
RAMBIT CB.scx
scenario.inf
Scenario.rar
Simpsons 3 RPG FIXED (USE THIS ONE).scx
Soldier Store- Platinum Pure (4 Players).s
SoldierStore(v2)NoHoRseS-vNBv3.scx
SUPER JUEGO 2009!!ORIJINAL.scx
TD ANCIENT 2K.scx
TD ANCIENT 4’3K.scx
TD ANCIENT 4-K.scx
Td Paris Ver 14 Fixter–C Hard! Beta.scx
Td Paris Ver 15 Fixter–C Ultra-H.scx
tincho.scx
Udaprey Pantanos Hard 5.2.scx
Udaprey Utopia Oficial 3v8 español 1,3.scx
Udaprey_Utopia_Oficial_3v8_español_1,3.scx
Uruk Hai TD V[SpX]28,3.scx
VeTeRaN BLooD ¬ PeRFeCTiON!!!.scx
warrior defence 2007 + recursos.scx
WORLD RISK (TheConquerors.es).scx
XERO TD 1500k -7 player game.scx
[E] World Risk 40 Wonders 2,5.scx
[IGZ] CBAV13.scx
[xxx]-Rambit-CB-Gold-Edition-[xxx].scx
_V23  [RPG]—WORLD Sha—-[AOC]  V23_.scx
~~SIMPSONS RPG V3,0~~-vNBv3.scx
°-°Gods Path Blood~Aldeano~Oficial°.scx
»ÌÌ«Grave Blood Oficial V5»Ì.scx

DISFRUNTELO Y QUE TENGAN UN BUEN DIA

DESCARGAR

HACER GRAFICA DE PASTEL CON PHP Y MYSQL

Hola amigos ya hemos podido guardar, modificar, eliminar y presentar datos de una base de datos por medio de HTML, PHP5 Y MySQL, pero ahora falta ver como hemos de presentar los datos gráficamente de manera que nos o les sea útil a nosotros o al encargado de cierto departamento y pueda tomar las decisiones correcta en base a la visualización de los datos que presentaremos, ahora les mostrare el código fuente con el cual podrán utilizar los datos de su tabla para generar graficas.

Primero les dejo el archivo de consultas.php que esta dentro de la carpeta modelo

<?php


//FUNCION PARA OBTERNER EL NUMERO TOTAL DE EGRESADOS TRABAJANDO

function egresadosTrabajando(){


    $enlace = mysql_connect("localhost", "root", "");

    mysql_select_db("sce", $enlace);


    $alumnosTrabando = "SELECT * FROM vmlzj_comprofiler WHERE cb_empleado='si'";

    $resultado = mysql_query($alumnosTrabando,$enlace);


    $numeroFilas = mysql_num_rows($resultado);


    return $numeroFilas;

}


//FUNCION PARA OBTENER DE LA TABLA EL NUMERO TOTAL DE EGRESADOS DESEMPLEADOS

function egresadosDesempleados(){


    $enlace = mysql_connect("localhost", "root", "");

    mysql_select_db("sce", $enlace);


    $alumnosTrabando = "SELECT * FROM vmlzj_comprofiler WHERE cb_empleado='no'";

    $resultado = mysql_query($alumnosTrabando,$enlace);


    $numeroFilas = mysql_num_rows($resultado);


    return $numeroFilas;

}


?>

Ahora les dejo el código que hace que pinte la grafica gAlumT.php

 

<?php

//MANDAMOS A LLAMAR LAS LIBRERIAS JPGRAPH

include ("jpgraph/jpgraph.php");

include ("jpgraph/jpgraph_pie.php");

include ("jpgraph/jpgraph_pie3d.php");


//MANDAMOS LLAMAR LA LIBRERIA PARA USAR LAS FUNCIONES QUE NOS DARAN LOS DATOS

include ("modelo/consultas.php");


//USAMOS LAS FUNCIONES PARA ASIGNAR LOS VALORES

$egreT = egresadosTrabajando();

$egreD = egresadosDesempleados();


//AQUI VAN LOS DATOS ASIGNADOS

$data = array($egreT,$egreD);



$graph = new PieGraph(450,200,"auto");

$graph->img->SetAntiAliasing();

$graph->SetMarginColor('gray');

//$graph->SetShadow(); 


// Setup margin and titles 

$graph->title->Set("Grafica de alumnos trabajando");


$p1 = new PiePlot3D($data);

$p1->SetSize(0.35);

$p1->SetCenter(0.5);


// Setup slice labels and move them into the plot 

$p1->value->SetFont(FF_FONT1,FS_BOLD);

$p1->value->SetColor("black");

$p1->SetLabelPos(0.2);


$nombres=array("Egresados con trabajo","Egresados sin trabajo");

$p1->SetLegends($nombres);


// Explode all slices 

$p1->ExplodeAll();


$graph->Add($p1);

$graph->Stroke();

?>

 

Les dejo la librería de JPGRAPH para que la puedan descargar, SALUDOS espero que les halla servidor

4c88e-descargar-button

Validación de sistemas críticos

Actividad 1:

Validación

1. ¿Describe las razones por las cuales es necesaria la validación?

a. Costes de fallos de ejecución. Los costes y las consecuencias de los fallos de ejecución de los sistemas críticos son potencial mente mucho más grandes que para los sistemas no críticos. Pueden reducirse los riesgos de los fallos del sistema invirtiendo más en verificación y validación del sistema. Normalmente es más económico encontrar y eliminar defectos antes de que el sistema sea entregado que pagar por los consecuentes costes de accidentes o de un mal funcionamiento de los servicios del sistema.

b. Validación de los atributos de confiabilidad. Puede tenerse que hacer una demostración formal a los clientes de que el sistema satisface sus requerimientos especificados de confiabilidad (disponibilidad, fiabilidad, seguridad y protección). Para evaluar estas características de confiabilidad se requieren actividades específicas de V & V explicadas más adelante en este capítulo. En algunos casos, los reguladores externos, tales como autoridades de aviación nacionales, pueden tener que certificar que el sistema es seguro antes de que éste sea desplegado. Para obtener esta certificación, pueden tenerse que diseñar y llevar a cabo procedimientos de V & V especiales que recogen la evidencia sobre la confiabilidad del sistema.

2. Cuál es el proceso para medir la fiabilidad de un software

Pruebas estadísticas

a. Se comienza estudiando los sistemas existentes del mismo tipo para establecer un per- fil operacional. Un perfil operacional identifica las clases de entradas al sistema y la probabilidad de que estas entradas ocurran en un uso normal.

b. A continuación, se construye un conjunto de datos de prueba que reflejan el perfil operacional. Esto significa que se crean datos de prueba con la misma distribución de probabilidad que los datos de prueba para los sistemas que se han estudiado. Normalmente, se utiliza un generador de datos de prueba para soportar este proceso.

c. Se prueba el sistema utilizando estos datos y se contabiliza el número y tipo de fallos que ocurren. Los instantes en los que ocurren estos fallos también son registrados. Tal y como se indicó en el Capítulo 9, las unidades de tiempo que se elijan deberían ser adecuadas para la métrica de fiabilidad utilizada.

d. Después de que se ha observado un número de fallos significativos estadísticamente, se puede calcular la fiabilidad del software y obtener el valor adecuado de la métrica de fiabilidad.

3. Que es y porque es importante un perfil de operaciones

Consiste en la especificación de clases de entradas y la probabilidad de su ocurrencia. Cuando un nuevo sistema software reemplaza a un sistema existente manual o automatizado, es razonablemente fácil evaluar el patrón de uso probable del nuevo software. Éste debería corresponderse con el uso del sistema existente, con algunas adiciones para las nuevas funcionalidades que (presumiblemente) se incluyen en el nuevo software. Por ejemplo, puede especificarse un perfil operacional para sistemas de centralitas de telecomunicaciones debido a que las compañías de telecomunicaciones conocen los patrones de llamadas que estos sistemas tienen que manejar.

El perfil operacional del software es importante por que refleja cómo se utilizará éste en la práctica.

4. La dificultad para la construcción de un perfil operacional de un software nuevo ¿Es igual para uno que se creó para remplazar a otro?

NO por que cuando un sistema software es nuevo e innovador, es difícil anticipar cómo será utilizado y, por lo tanto, generar un perfil operacional preciso.

5. Cómo funciona el modelo de crecimiento de fiabilidad

Un modelo de crecimiento de fiabilidad es un modelo de cómo cambia la fiabilidad del sistema a lo largo del tiempo durante el proceso de pruebas. Para predecir la fiabilidad, el modelo conceptual de crecimiento de la fiabilidad debe ser traducido a un modelo matemático.

Aquí no se entra en este nivel de detalle, sino que simplemente se plantea el principio del crecimiento de la fiabilidad.

6. ¿Es garantía de que la fiabilidad mejorara en cada entrega después de corregir fallos? ¿Por qué?

SI, por que a medida que se descubren los fallos del sistema, los defectos subyacentes que provocan estos fallos son reparados para que la fiabilidad del sistema mejore durante las pruebas y depuración.

Aunque los defectos del software no siempre se reparan durante la depuración, y cuando se cambia un programa, a menudo se introducen nuevos defectos. La probabilidad de ocurrencia de estos defectos puede ser mayor que la probabilidad de ocurrencia del defecto que ha sido reparado. Por lo tanto, la fiabilidad del sistema a veces puede empeorar en una nueva entrega en lugar de mejorar.

Por lo tanto no es garantía

7. ¿Hasta cuando las pruebas y depuración deben continuar?

Las pruebas pueden detenerse cuando se alcance el nivel requerido de fiabilidad del sistema.

8. Ventajas de la predicción de la predicción a partir de un modelo

Planificación de las pruebas. Dado el calendario actual de pruebas, puede predecirse cuándo se completarán las pruebas. Si el final de las pruebas tiene lugar después de la fecha planificada de entrega del sistema, entonces puede tenerse que desplegar recursos adicionales para probar y depurar, y así acelerar la tasa de crecimiento de fiabilidad.

Negociaciones con el cliente. Algunas veces el modelo de fiabilidad muestra que el crecimiento de la fiabilidad es muy lento y que se requiere una cantidad de esfuerzo de pruebas desproporcionada para obtener un beneficio relativamente pequeño.

Puede merecer la pena renegociar los requerimientos de fiabilidad con el cliente. De forma alternativa, puede ocurrir que el modelo prediga que la fiabilidad requerida probablemente nunca será alcanzada. En este caso, se tendrán que renegociar con el cliente los requerimientos de la fiabilidad del sistema.

9. Tipos de revisiones propuestas por el autor para ser obligatorias y garantizar la seguridad de un sistema

1. revisión para corregir la función que se pretende;

2. revisión para una estructura comprensible y mantenible;

3. revisión para verificar que el algoritmo y el diseño de las estructuras de datos son consistentes con el comportamiento especificado;

4. revisión de la consistencia del código y del diseño del algoritmo y de las estructuras de datos;

5. revisión de la adecuación de los casos de prueba del sistema

10. En qué consiste la técnica más efectiva para demostrar la seguridad del sistema (contradicción)

La técnica más efectiva para demostrar la seguridad de un sistema es la demostración por contradicción. Se comienza suponiendo que se está en un estado no seguro, el cual ha sido identificado por un análisis de contingencias del sistema, y que puede ser alcanzado ejecutando el programa. Se describe un predicado que define este estado no seguro.

A continuación, se analiza el código de forma sistemática y se muestra que, para todos los caminos del programa que conducen a ese estado, la condición de terminación de estos caminos contradice el predicado no seguro.

Si éste es el caso, la suposición inicial de un estado inseguro es incorrecta.

Si se repite esto para todas las contingencias identificadas, entonces el software es seguro.

a. Ejemplo:

Como ejemplo, consideremos el código de la Figura 24.6, que podría ser parte de la implementación del sistema de suministro de insulina. Desarrollar un argumento de seguridad para este código implica demostrar que la dosis de insulina administrada nunca es mayor que algún nivel máximo establecido para cada individuo diabético. Por lo tanto, no es necesario probar que el sistema suministra la dosis correcta, sino simplemente que nunca suministra una sobredosis al paciente.

Para construir un argumento de seguridad, se identifica la precondición para el estado in- seguro que, en este caso, es que currentDose > maxDose. Después se demuestra que todos los caminos del programa conducen a una contradicción de esta aserción no segura. Si éste es el caso, la condición no segura no puede ser cierta. Por lo tanto, el sistema es seguro. Se pueden estructurar y presentar los argumentos de seguridad de forma gráfica tal y como se muestra en la Figura 24.7. Los argumentos de seguridad, según se refleja en la citada figura, son mucho más cortos que las verificaciones formales de sistemas. Primero se identifica todos los posibles caminos que conducen a! estado potencial mente inseguro. Se trabaja hacia atrás a partir de este estado no seguro y se considera la última asignación de todas las variables de estado en cada camino que conduce a él. Pueden omitirse los cálculos previos (como la sentencia if 1 en la Fi- gura 24.7) en el argumento de seguridad. En este ejemplo, todo lo que se necesita saber es el conjunto de posibles valores de currentDose inmediatamente antes de que el método administerlnsulin sea ejecutado. En el argumento de seguridad mostrado en la Figura 24.7, existen tres posibles caminos en el programa que conducen a la llamada al método administerlnsulin. Queremos demostrar que la cantidad de insulina suministrada nunca excede del valor de maxDose. Se consideran todos los posibles caminos hasta administerlnsulin:

Fuente: ingeniería del software lan Sommenville

Haciendo una bitácora para una aplicación Web con CodeIgniter

Se preguntarán para que sirve una bitácora en en una Aplicación Web. Bueno les diré, es muy útil, ya que va guardando los movimientos de los usuarios y en  caso de reclamo por parte de los usuarios de que el sistema que hemos desarrollado no funciona por que han perdido datos pero en realidad ellos los borraron por razones privadas, nosotros podremos defendernos con esta bitácora de movimientos que dirá a que hora se realizo cierta acción y quien la realizo ejemplo:

image

Como pueden ver se puede visualizar la acción realizada, el usuario al que se le hizo el cambio luego al usuario que realizo

el cambio, la fecha y hora en que se realizo la acción y valor anterior y el valor nuevo

A continuación les mostrare parte del código

Vista de la bitácora “bitacora.php”

<?php

function estado($edo){

    if($edo==1){

        return "Administrador";

        }

    else {

        return "Usuario";

    }

    }

 

$eliminar = base_url()."imagenes/eliminar.fw.png";

$actualizar = base_url()."imagenes/modificar.png";

    

function estadoImg($edo){

    $palomita = base_url()."imagenes/v.fw.png";

    $x = base_url()."imagenes/eliminar.png";

    if($edo==1){

        return "<img src=".$palomita.">";

    }

    else{

        return "<img src=".$x.">";

    }

}

 

 

 

?>

        <script type="text/javascript">

        <!--

        

        function confirmacion(id) {

        var answer = confirm("Esta seguro que desea eliminar")

        if (answer){

        alert("Ha confirmado eliminar")

        location.href="deleteUserId/"+id

        }

        else{

        alert("Cancelado")

        }

    }

    

    function actualizar(id) {

        

        location.href="updateUserId/"+id

        

    }

//-->


 


        <?php echo $_SESSION['nombre'];?>

        

        

        

Bitacora

    

<div id="container">

 

    <div id="body" align="center">

        

         

            <table border="0" align="center">

            

            <form id="b" name="b" action="index.php/welcome/buscarBitacora" method="POST">

            <label for="buscar">Buscar 

            <input type= "text" id="buscar" name="buscar" >

            

            <input type="submit" id="arre" name="arre" value="buscar"

            

            

            

            

            <table border="0" align="center" id="tabla">

            <tr bgcolor="#7362ec" align="center">

            

            Acción

            Usuario administrado 

            Usuario administrador  

            Fecha

            Valor Anterior

            Valor nuevo

            

            

            

    

        

            <?php

            $colorfila=0;

            

            

            if($users!=false){

               foreach($users->result() as $row){

                   if ($colorfila==0){ 

                   $color= "#b5b5b5"; 

                   $colorfila=1; 

                    }else{ 

                   $color="#f7f7f7"; 

                   $colorfila=0; 

                }    

                

                

                echo "<tr bgcolor='".$color."' align='center' ";?> onmouseover="this.style.backgroundColor='#E13300'"

                                                                   onmouseout="this.style.backgroundColor=''"><?php

                

                echo " ".$row->accion."";

                echo "".$row->UsuarioAdministrado. "";

                echo " ".$row->usuarioAdministrador."";

                echo "".$row->fecha."";

                echo "".$row->valor_anterior."";

                echo "".$row->valor_nuevo."";

                

                

                echo "";

            }

            

        }

        ?>

        

        

        

 

    

 

 

 


La parte del controlador “users.php”

//FUNCION GUARDAR BITACORA

        public function guardarBitacora($id,$accion){

            if(isset($_SESSION['usuario'])){

                

                $datoAnterior="";

                $datoNuevo="";

                //Obteniendo los datos que se van a modificar

                $nom_usu = $this->input->post('nom_usu');

                

                $clave=sha1($this->input->post('psw'));

    

                $login = $this->input->post('login');

                $status = $this->input->post('status');

                $acceso = $this->input->post('acceso');

                $local = $this->input->post('local');

                $ld_nacional = $this->input->post('ld_nacional');

                $cel_ld = $this->input->post('cel_ld');

                $cel_local = $this->input->post('cel_local');

                $internacional = $this->input->post('internacional');

                

                $br="
"
;

                

                //Obterner los datos de la la base de datos

                $datosDB=$this->usersModel->datosUsuario($id);

                

                //Comparando login

                if($login==@$datosDB->login){

                        $datoAnterior.="";

                    }

                else{

                    $datoAnterior.="login:".$datosDB->login;

                    $datoNuevo.="login:".$login;

                    }

                    

                    

                //Comparando nombre de usuario    

                if($nom_usu==$datosDB->nom_usu){

                        $datoAnterior.= "";

                    }

                else{

                    $datoAnterior.=$br."nom_usu:".$datosDB->nom_usu;

                    $datoNuevo.=$br."login:".$nom_usu;

                    }

                    

                //Comparando nombre de password    

                if($clave==$datosDB->psw){

                        $datoAnterior.= "";

                    }

                else{

                    $datoAnterior.=$br."psw:***";

                    $datoNuevo.=$br."login:???";

                    }

                    

                //Comparando status    

                if($status==$datosDB->status){

                        $datoAnterior.="";

                    }

                else{

                    $datoAnterior.=$br."status:".$datosDB->status;

                    $datoNuevo.=$br."status:".$status;

                    }

                

                

                

                //Comparando acceso    

                if($acceso==$datosDB->acceso){

                        $datoAnterior.="";

                    }

                else{

                    $datoAnterior.=$br."acceso:".$datosDB->acceso;

                    $datoNuevo.=$br."acceso:".$acceso;

                    }

                

                

                

                //Comparando llamadas locales    

                if($local==$datosDB->local){

                        $datoAnterior.="";

                    }

                else{

                    $datoAnterior.=$br."local:".$datosDB->local;

                    $datoNuevo.=$br."local:".$local;

                    }

                

                

                

                //Comparando llamadas nacionales    

                if($ld_nacional==$datosDB->ld_nacional){

                        $datoAnterior.="";

                    }

                else{

                    $datoAnterior.=$br."ld_nacional:".$datosDB->ld_nacional;

                    $datoNuevo.=$br."ld_nacional:".$ld_nacional;

                    }

                

                

                

                //Comparando llamadas cel_ld    

                if($cel_ld==$datosDB->cel_ld){

                        $datoAnterior.="";

                    }

                else{

                    $datoAnterior.=$br."cel_ld:".$datosDB->cel_ld;

                    $datoNuevo.=$br."cel_ld:".$cel_ld;

                    }

                

                

                

                //Comparando llamadas cel_local    

                if($cel_local==$datosDB->cel_local){

                        $datoAnterior.="";

                    }

                else{

                    $datoAnterior.=$br."cel_local:".$datosDB->cel_local;

                    $datoNuevo.=$br."cel_local:".$cel_local;

                    }

                

                

                

                if($internacional==$datosDB->internacional){

                        $datoAnterior.="";

                    }

                else{

                    $datoAnterior.=$br."Internacional:".$datosDB->internacional;

                    $datoNuevo.=$br."internacional:".$internacional;

                    }

                

                

                

            $dataBit = array(

                            "accion" => $accion,

                            "usuarioAdministrador" => $_SESSION["login"],

                            "usuarioAdministrado" => $login,

                            "valor_anterior" => $datoAnterior,

                            "valor_nuevo" => $datoNuevo

                            );

            $this->usersModel->insertBitacora($dataBit);

        

        }

        }

Ahora la parte del modelo “usersmodels”

public function getBitacora(){

    

        $data=$this->db->get('vistabitacora');

            

        if($data->num_rows() >0){

            return $data;

        }else{

            return false;

            }

    }

 

    public function insertBitacora($data){

        $this->db->insert('bitacora',$data);

        

    }

 

function buscarBitacora($dato){

        

        $this->db->select('accion');

        $this->db->select('usuarioAdministrador');

        $this->db->select('UsuarioAdministrado');

        $this->db->select('valor_anterior');

        $this->db->select('valor_nuevo');

        $this->db->select('fecha');

        

        $this->db->like('usuarioAdministrador',$dato);

        $this->db->or_like('accion',$dato);

        $this->db->or_like('usuarioAdministrado',$dato);

        $this->db->or_like('valor_anterior',$dato);

        $this->db->or_like('valor_nuevo',$dato);

        $this->db->or_like('fecha',$dato);

        

        

        

        $consul=$this->db->get('bitacora');

    

        if($consul->num_rows() >0){

        return $consul;

        }else{

            return false;

        }    

    }    

 

Archivo SQL

# SQL Manager 2010 for MySQL 4.5.1.3

# ---------------------------------------

# Host     : localhost

# Port     : 3306

# Database : asteriskcdrdb

 

 

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES latin1 */;

 

SET FOREIGN_KEY_CHECKS=0;

 

CREATE DATABASE `asteriskcdrdb`

    CHARACTER SET 'latin1'

    COLLATE 'latin1_swedish_ci';

 

USE `asteriskcdrdb`;

 

#

# Structure for the `bitacora` table : 

#

 

CREATE TABLE `bitacora` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `accion` varchar(20) DEFAULT NULL,

  `usuarioAdministrador` varchar(20) DEFAULT NULL,

  `usuarioAdministrado` varchar(20) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,

  `valor_anterior` varchar(200) DEFAULT NULL,

  `valor_nuevo` varchar(200) DEFAULT NULL,

  `fecha` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=latin1 COMMENT='id-int(11)naccion-varchar(20)nusuario-varchar(20)nfecha-datenhora-timenvalor_anterior-varchar(20)nvalor_nuevo-varchar(20)';

 

#

# Structure for the `cdr` table : 

#

 

CREATE TABLE `cdr` (

  `calldate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

  `clid` varchar(80) NOT NULL DEFAULT '',

  `src` varchar(80) NOT NULL DEFAULT '',

  `dst` varchar(80) NOT NULL DEFAULT '',

  `dcontext` varchar(80) NOT NULL DEFAULT '',

  `channel` varchar(80) NOT NULL DEFAULT '',

  `dstchannel` varchar(80) NOT NULL DEFAULT '',

  `lastapp` varchar(80) NOT NULL DEFAULT '',

  `lastdata` varchar(80) NOT NULL DEFAULT '',

  `duration` int(11) NOT NULL DEFAULT '0',

  `billsec` int(11) NOT NULL DEFAULT '0',

  `disposition` varchar(45) NOT NULL DEFAULT '',

  `amaflags` int(11) NOT NULL DEFAULT '0',

  `accountcode` varchar(20) NOT NULL DEFAULT '',

  `uniqueid` varchar(32) NOT NULL DEFAULT '',

  `userfield` varchar(255) NOT NULL DEFAULT '',

  KEY `IDX_UNIQUEID` (`uniqueid`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

#

# Structure for the `user_control` table : 

#

 

CREATE TABLE `user_control` (

  `id_usu` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,

  `status` int(1) unsigned NOT NULL DEFAULT '1',

  `nom_usu` varchar(25) NOT NULL,

  `login` varchar(4) NOT NULL DEFAULT '0000',

  `psw` varchar(40) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,

  `local` tinyint(4) NOT NULL DEFAULT '0',

  `ld_nacional` tinyint(4) NOT NULL DEFAULT '0',

  `cel_local` tinyint(4) NOT NULL DEFAULT '0',

  `cel_ld` tinyint(4) NOT NULL DEFAULT '0',

  `internacional` tinyint(4) NOT NULL DEFAULT '0',

  `acceso` tinyint(4) NOT NULL DEFAULT '0',

  PRIMARY KEY (`id_usu`),

  UNIQUE KEY `login` (`login`)

) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8;

 

#

# Structure for the `usuarios` table : 

#

 

CREATE TABLE `usuarios` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `username` varchar(20) DEFAULT NULL,

  `password` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

#

# Data for the `bitacora` table  (LIMIT 0,500)

#

 

INSERT INTO `bitacora` (`id`, `accion`, `usuarioAdministrador`, `usuarioAdministrado`, `valor_anterior`, `valor_nuevo`, `fecha`) VALUES 

  (1,'CerrarSesion','45','',NULL,NULL,'2012-11-02 19:06:35'),

  (2,'Acceso','00','',NULL,NULL,'2012-11-02 19:09:07'),

  (3,'Actualización','00','00','
acceso:1'
,'
acceso:0'
,'2012-11-02 19:09:41'),

  (4,'CerrarSesion','00','',NULL,NULL,'2012-11-02 19:09:45'),

  (5,'Acceso','00','',NULL,NULL,'2012-11-02 19:09:52'),

  (6,'CerrarSesion','00','',NULL,NULL,'2012-11-02 19:12:31'),

  (7,'Acceso','00','',NULL,NULL,'2012-11-02 19:12:40'),

  (8,'CerrarSesion','00','',NULL,NULL,'2012-11-02 19:13:27'),

  (9,'Acceso','00','',NULL,NULL,'2012-11-02 19:13:34'),

  (10,'Acceso','05','',NULL,NULL,'2012-11-05 09:33:09'),

  (11,'CerrarSesion','05','',NULL,NULL,'2012-11-05 09:37:14'),

  (12,'Acceso','05','',NULL,NULL,'2012-11-05 09:38:30'),

  (13,'Actualización','05','0','login:05
nom_usu:Julio Cesar
status:1
acceso:1
local:1'
,'login:
login:
status:
acceso:
local:'
,'2012-11-06 16:51:42'),

  (14,'Cambio de contraseña','05','',NULL,NULL,'2012-11-06 16:55:18'),

  (15,'CerrarSesion','05','',NULL,NULL,'2012-11-06 16:55:24'),

  (16,'Acceso','00','',NULL,NULL,'2012-11-06 16:58:49'),

  (17,'Actualización','00','05','','','2012-11-06 16:59:29'),

  (18,'Actualización','00','05','
psw:***
local:0'
,'
login:???
local:1'
,'2012-11-06 17:01:56'),

  (19,'Actualización','00','05','
local:0'
,'
local:1'
,'2012-11-06 17:03:18'),

  (20,'CerrarSesion','00','',NULL,NULL,'2012-11-06 17:03:29'),

  (21,'Acceso','05','',NULL,NULL,'2012-11-06 17:03:34'),

  (22,'Cambio de contraseña','05','',NULL,NULL,'2012-11-06 17:03:49'),

  (23,'CerrarSesion','05','',NULL,NULL,'2012-11-06 17:03:54'),

  (24,'Acceso','05','',NULL,NULL,'2012-11-06 17:04:01'),

  (25,'Acceso','05','',NULL,NULL,'2012-11-07 07:00:08'),

  (26,'Registro','05','10','login:
nom_usu:
psw:***
status:
acceso:
local:'
,'login:10
login:Chicho
login:???
status:1
acceso:0
local:1'
,'2012-11-07 07:01:00'),

  (27,'Registro','05','0','
psw:***'
,'
login:???'
,'2012-11-07 07:03:42'),

  (28,'Cambio de contraseña','05','',NULL,NULL,'2012-11-07 07:05:35'),

  (29,'Cambio de contraseña','05','43',NULL,NULL,'2012-11-07 07:08:16'),

  (30,'CerrarSesion','05','',NULL,NULL,'2012-11-07 07:13:31'),

  (31,'Acceso','05','',NULL,NULL,'2012-11-07 07:17:14'),

  (32,'Eliminacion','05','40','id_usu:40
nom_usu:Felipe
acceso:1
status:1
local:0
ld_nacional:0
cel_local:0
cel_ld:0
intenacional:0'
,NULL,'2012-11-07 07:17:59'),

  (33,'Actualización','05','01','login:05
psw:***
acceso:1
local:0'
,'login:01
login:???
acceso:0
local:1'
,'2012-11-07 07:23:14'),

  (34,'Actualización','05','11','login:01
local:0'
,'login:11
local:1'
,'2012-11-07 07:23:57'),

  (35,'Actualización','05','01','
psw:***
local:0'
,'
login:???
local:1'
,'2012-11-07 07:26:04'),

  (36,'Registro','05','21',NULL,NULL,'2012-11-07 07:41:53'),

  (37,'CerrarSesion','05','',NULL,NULL,'2012-11-07 07:42:07'),

  (38,'Acceso','21','',NULL,NULL,'2012-11-07 07:42:16'),

  (39,'Cambio de contraseña','21','',NULL,NULL,'2012-11-07 07:42:36'),

  (40,'CerrarSesion','21','',NULL,NULL,'2012-11-07 07:42:48'),

  (41,'Acceso','21','',NULL,NULL,'2012-11-07 07:42:56'),

  (42,'CerrarSesion','21','',NULL,NULL,'2012-11-07 07:43:35'),

  (43,'Acceso','10','',NULL,NULL,'2012-11-10 17:13:47'),

  (44,'CerrarSesion','10','',NULL,NULL,'2012-11-10 17:13:55'),

  (45,'Acceso','06','',NULL,NULL,'2012-11-10 17:15:15'),

  (46,'CerrarSesion','06','',NULL,NULL,'2012-11-10 17:16:21'),

  (47,'Acceso','06','',NULL,NULL,'2012-11-10 17:16:32');

COMMIT;

 

#

# Data for the `cdr` table  (LIMIT 0,500)

#

 

INSERT INTO `cdr` (`calldate`, `clid`, `src`, `dst`, `dcontext`, `channel`, `dstchannel`, `lastapp`, `lastdata`, `duration`, `billsec`, `disposition`, `amaflags`, `accountcode`, `uniqueid`, `userfield`) VALUES 

  ('2012-09-03 19:52:50','"Julian Garibaldi" ','100','100','from-internal','SIP/100-00000000','SIP/100-00000001','Dial','SIP/100,"",tr',10,5,'ANSWERED',3,'','1346723570.0',''),

  ('2012-09-04 13:28:33','"Julian Garibaldi" ','100','100','from-internal','SIP/100-00000001','SIP/100-00000002','Congestion','10',5,0,'FAILED',3,'','1346786913.1',''),

  ('2012-09-04 13:29:08','"Julian Garibaldi" ','100','100','from-internal','SIP/100-00000004','SIP/100-00000005','Dial','SIP/100,"",tr',24,22,'ANSWERED',3,'','1346786948.4',''),

  ('2012-09-04 13:33:52','"Julian Garibaldi" ','100','100','from-internal','SIP/100-00000006','SIP/100-00000007','Congestion','10',5,0,'FAILED',3,'','1346787232.6',''),

  ('2012-09-04 13:35:36','"Julian Garibaldi" ','100','100','from-internal','SIP/100-0000000d','SIP/100-0000000e','Dial','SIP/100,"",tr',16,8,'ANSWERED',3,'','1346787336.13',''),

  ('2012-09-04 14:13:33','"Recepcion" ','300','300','personalizado','SIP/300-0000000f','SIP/300-00000010','Hangup','',30,0,'NO ANSWER',3,'','1346789613.15',''),

  ('2012-09-04 14:14:08','"Recepcion" ','300','300','personalizado','SIP/300-00000011','SIP/300-00000012','Dial','SIP/300,30,Tt',28,25,'ANSWERED',3,'','1346789648.17',''),

  ('2012-09-04 14:18:24','"Recepcion" ','300','300','personalizado','SIP/300-00000013','SIP/300-00000014','Dial','SIP/300,30,Tt',4,0,'NO ANSWER',3,'','1346789904.19','');

COMMIT;

 

#

# Data for the `user_control` table  (LIMIT 0,500)

#

 

INSERT INTO `user_control` (`id_usu`, `status`, `nom_usu`, `login`, `psw`, `local`, `ld_nacional`, `cel_local`, `cel_ld`, `internacional`, `acceso`) VALUES 

  (36,0,'kakaroto','45','da39a3ee5e6b4b0d3255bfef95601890afd80709',0,0,1,1,0,0),

  (38,1,'Julio Cesar','01','7c4a8d09ca3762af61e59520943dc26494f8941b',0,0,0,0,0,0),

  (39,1,'Julian Garibaldi','06','4f62e47bd66b5ab1a8fa1e9508d53ae78e7dcfac',0,1,1,1,1,1),

  (41,1,'Chicho','10','4f62e47bd66b5ab1a8fa1e9508d53ae78e7dcfac',1,0,0,0,0,0),

  (42,0,'0','0','da39a3ee5e6b4b0d3255bfef95601890afd80709',0,0,0,0,0,0),

  (43,1,'diane','11','4f62e47bd66b5ab1a8fa1e9508d53ae78e7dcfac',1,0,0,0,0,0),

  (45,1,'Mijail','43','4f62e47bd66b5ab1a8fa1e9508d53ae78e7dcfac',1,0,0,0,0,0),

  (46,1,'xyz','21','dd5fef9c1c1da1394d6d34b248c51be2ad740840',1,0,0,0,0,0);

COMMIT;

 

 

 

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

 

¿Qué es y cómo opera un ataque de Cross-Site Scripting (XSS)?

Definición

XSS es un ataque de inyección de código malicioso para su posterior ejecución que puede realizarse a sitios web, aplicaciones locales e incluso al propio navegador.

Sucede cuando un usuario mal intencionado envía código malicioso a la aplicación web y se coloca en forma de un hipervínculo para conducir al usuario a otro sitio web, mensajería instantánea o un correo electrónico. Así mismo, puede provocar una negación de servicio (DDos).

 

clip_image002
Fig. 1. Operación de un ataque XSS

Generalmente, si el código malicioso se encuentra en forma de hipervínculo es codificado en HEX (basado en el sistema de numeración hexadecimal, base 16) o algún otro, así cuando el usuario lo vea, no le parecerá sospechoso. De esta manera, los datos ingresados por el usuario son enviados a otro sitio, cuya pantalla es muy similar al sitio web original.

De esta manera, es posible secuestrar una sesión, robar cookies y cambiar la configuración de una cuenta de usuario.

Tipos de ataques

Las diversas variantes de esta vulnerabilidad pueden dividirse en dos grandes grupos: el primero se conoce como XSS persistente o directo y el segundo como XSS reflejado o indirecto.

Directo o persistente. Consiste en invadir código HTML mediante la inclusión de etiquetas y en sitios que lo permiten.

Local. Es una de las variantes del XSS directo, uno de sus objetivos consiste en explotar las vulnerabilidades del mismo código fuente o página web. Esas vulnerabilidades son resultado del uso indebido del DOM (Modelo de Objetos del Documento, es un conjunto estandarizado de objetos para representar páginas web) con JavaScript, lo cual permite abrir otra página web con código malicioso JavaScript incrustado, afectando el código de la primera página en el sistema local. Cuando el XSS es local, ningún código malicioso es enviado al servidor. El funcionamiento toma lugar completamente en la máquina del cliente, pero modifica la página proporcionada por el sitio web antes de que sea interpretada por el navegador para que se comporte como si se realizara la carga maliciosa en el cliente desde el servidor. Esto significa que la protección del lado del servidor que filtra el código malicioso no funciona en este tipo de vulnerabilidad.

Indirecto o reflejado. Funciona modificando valores que la aplicación web pasa de una página a otra, sin emplear sesiones. Sucede cuando se envía un mensaje o ruta en una URL, una cookie o en la cabecera HTTP (pudiendo extenderse al DOM del navegador).

Consideraciones

Como desarrollador

La aplicación web que se desee implementar debe contar con un buen diseño. Posteriormente, se deben realizar diversos tipos de pruebas antes de su liberación, para detectar posibles fallos y  huecos de seguridad, mediante el empleo de alguna herramienta automatizada. También, es conveniente proporcionar mantenimiento a la aplicación y estar actualizado en las versiones de las herramientas que se emplean para su puesta en marcha.

Algunas recomendaciones para mitigar el problema, son:

Emplear librerías verificadas o algún framework que ayude a disminuir el inconveniente. Por ejemplo: la librería anti-XSS de Microsoft, el módulo ESAPI de codificación de OWASP, Apache Wicket, entre otros.

Entender el contexto en el cual los datos serán usados y la codificación de los mismos, este aspecto es importante cuando se envían datos de un componente a otro de la aplicación o cuando se deben enviar a otra aplicación.

Conocer todas las áreas potenciales donde las entradas no verificadas pueden acceder al software: parámetros o argumentos, cookies, información de la red, variables de entorno, resultados de consultas, búsqueda de DNS reversible, peticiones enviadas en las cabeceras, componentes de la URL, correos electrónicos, archivos, nombres de archivo, bases de datos o algún sistema externo que proporcione información a la aplicación.

Las validaciones de datos de entrada, deben realizarse siempre del lado del servidor, no sólo en el lado del cliente. Los atacantes pueden evitar la validación realizada del lado del cliente modificando valores antes de realizar verificaciones o remover por completo esta validación.

En caso de ser posible, emplear mecanismos automatizados para separar cuidadosamente los datos del código fuente: revisión de comillas, codificación y validación automática que muchas veces se escapan al desarrollador.

Por cada página web generada, se recomienda emplear una codificación determinada de caracteres, ya que si no se especifica, el navegador puede dar un trato diferente a ciertas secuencias de caracteres especiales, permitiendo la apertura del cliente a posibles ataques.

Para mitigar el problema de ataque contra el uso de cookies, es conveniente indicar que tiene el formato de HttpOnly. En los navegadores que lo soportan, puede prevenirse que la cookie sea usada por scripts maliciosos desde el lado del cliente.

Se debe emplear una estrategia de validación de las entradas: rechazar aquellas que no cumplan con lo especificado, limpiar las que sean necesarias. Al validar, considérense  las características de cada entrada: longitud, tipo de dato, rango de valores aceptados, entradas perdidas o adicionales, sintaxis, consistencia con otras entradas proporcionadas y seguimiento de las reglas del negocio.

Cuando se construyan páginas web de forma dinámica (generadas de acuerdo a las entradas o solicitudes de los usuarios), es recomendable usar listas blancas estrictas. Todas las entradas deben ser limpiadas y validadas, incluidos cookies, campos ocultos, cabeceras y la propia dirección.

Cuando una cantidad aceptable de objetos, como nombres de archivo o URL es limitada o conocida, es conveniente crear una conjunto de asignaciones de valores de entrada fijo a los nombres de archivo o URL y rechazar todos los demás.

Se recomienda usar un firewall de aplicaciones capaz de detectar ataques cuando el código se genere dinámicamente, como medida de prevención, debe complementarse con otras para proporcionar defensa en profundidad.

Como Administrador de Bases de Datos

Así como el desarrollador debe validar las entradas proporcionadas por parte del usuario, el encargado de diseñar e implementar la base de datos debe considerar la seguridad de la misma, pues en ella se guarda la información proporcionada por los usuarios y es manipulada mediante la aplicación web. Los datos que serán almacenados, también pueden ser validados mediante el uso de constraints  (restricciones aplicables a los objetos de una base de datos: unique, default, not null, check) que restringen la entrada para cada campo.

PDF XSS

Es una vulnerabilidad ampliamente usada para afectar el Acrobat Reader de Adobe. En este caso, si se abusa de las características para abrir archivos en Acrobat, un sitio bien protegido se vuelve vulnerable a un ataque de tipo XSS si da alojamiento a documentos en formato PDF.

Esto afecta seriamente, a menos que se actualice el Reader o se cambie la forma en que el navegador maneja dichos documentos.

Una manera de combatirlo, si se cuenta con el servidor de aplicaciones web Apache, es llevar a cabo la correcta configuración de ModSecurity, ya que cuenta con directivas de protección para archivos en formato PDF.

XSRF

Un ataque Cross-Site Request Forgery (XSRF ó también CSRF) explota la confianza que un usuario tiene hacia las entradas proporcionadas por un sitio.

Por ejemplo: un usuario se encuentra autenticado y navegando en un sitio, en ese momento un atacante obtiene el control de su navegador, con él realiza una solicitud a una tarea de una URL válida del sitio, por lo que el atacante tendrá acceso como si fuera el usuario previamente registrado.

Distintivamente, un atacante intercalará código HTML o JavaScript malicioso en un correo o en una tarea específica accesible desde una URL, que se ejecuta ya sea directamente o empleando un error de tipo XSS. También, es posible realizar inyección a través de lenguajes como el BBCode. Este tipo de ataques son difíciles de detectar.

Muchas de las funcionalidades de un sitio web son susceptibles de uso durante un ataque XSRF. Esto incluye información enviada tanto por GET como por POST.

También puede usarse como vector para explotar vulnerabilidades de tipo XSS en una aplicación. Ejemplos de ello son: una vulnerabilidad de tipo XSS en un foro donde un atacante puede obligar al usuario a publicar –sin que éste se dé cuenta- un gusano informático. Un atacante puede también usar XSRF para transmitir un ataque a algún sitio de su elección, así como realizar un DDos.

Sin embargo, las formas más comunes de realizar este tipo de ataque consisten en usar la etiqueta HTML o el objeto JavaScript empleados para imágenes. Distintivamente, el atacante infiltrará un email o sitio web en ellos, así cuando el usuario cargue la página o el correo electrónico, también estará realizando la petición a la URL que haya colocado el atacante.

Un atacante puede instalar su script dentro de un documento de Word, un archivo de flash, un clip de video, redifusión web RSS o Atom, o algún otro tipo de formato que pueda alojar el script.

Si un sitio web permite ejecutar sus funciones empleando una URL estática o peticiones POST, es posible que sea vulnerable, si la función se lleva a cabo mediante la petición GET, el riesgo es mayor. Si se realizan las mismas funciones,  de la misma forma repetidamente, entonces la aplicación puede ser vulnerable.

Un ataque XSRF no puede evitarse mediante la verificación del referer de las cabeceras de la petición realizada, ya que puede “limpiarse” o modificarse mediante algún tipo de filtro. Las cabeceras pueden falsearse usando XMLHTTP, por ejemplo.

Una de las soluciones más conocidas, consiste en adjuntar un token no predecible y cambiante a cada petición. Es importante que el estado de éste vaya asociado con la sesión del usuario, de otra manera un atacante puede adjuntar su propio token válido y emplearlo en su beneficio. Adicionalmente, al ligarlo a la sesión del usuario es importante limitar el periodo durante el cual será válido.

Referencias.

Mesografía.

· http://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

· http://www.owasp.org/index.php/Testing_for_DOM-based_Cross_site_scripting_(OWASP-DV-003)

· http://www.modsecurity.org/projects/modsecurity/apache/feature_universal_pdf_xss.html

· http://www.cgisecurity.com/csrf-faq.html

· http://www.isecpartners.com/files/XSRF_Paper_0.pdf

· http://www.techrepublic.com/blog/security/what-is-cross-site-scripting/426

· http://cwe.mitre.org/data/definitions/79.html

Página 1 de 2

Creado con WordPress & Tema de Anders Norén