Вы находитесь на странице: 1из 9

TOPICOS AVANZADOS DE PROGRAMACIÓN Instituto

TECNOLÓGICO
Ingeniería en Sistemas Computacionales Tecnológico
NACIONAL
DE MÉXICO de la Costa Grande
Unidad II “Aplicaciones web”

Lunes 16 de Abril de 2018


Seguridad en la plataforma Java
El JDK 1.0 tenía un modelo de seguridad muy sencillo: las clases locales tienen todos los permisos y las
clases remotas estan confinadas a la sandbox Conjunto de medidas de seguridad. La sandbox crea un
entorno en el que se imponen limitaciones sobre lo que puede realizar el código. Son utilizadas cuando
el codigo proviene de fuentes desconocidas o en las que no se tiene confianza, permitiendo al usuario
ejecutar codigo con ciertas garantías. El JDK 1.1 implementaba una ligera modificación: al código remoto
firmado por una entidad de confianza se le otorgaban los mismos permisos que a las clases locales.

Por lo tanto, ambas versiones del JDK proporcionaban control del tipo todo o nada. Los programas tenían
todos los permisos o tenían los permisos otorgados por la sandbox. La nueva plataforma Java tiene un
mecanismo más robusta y flexible a la vez, una política de seguridad asigna un conjunto de permisos a
orígenes de código, los cuales un poco de investigación y lectura por parte del programador, puede lograr
vencer las nuevas barreras de seguridad, que protegen programas disfrazados de applets.

El origen de codigo consta de


:
1. La ubicacion del codigo que puede ser un URL o un fichero JAR, y

2. Certificados (que veremos mas adelante).

El administrador de seguridad comprueba los permisos en tiempo de ejecución.

Hay varias clases de permisos cada una de las cuales encapsula los detalles de un permiso particular.

Por ejemplo la siguiente sentencia:

File Permission p= new File Permission(”/tmp / ∗ ”,”read,write” );

establece que es posible leer y escribir cualquier archivo del directorio /tmp/. La jerarquía de permisos se
muestra en el siguiente diagrama:

Instructor: Carlos Baltazar Oliva Enero – Junio 2018 50


TOPICOS AVANZADOS DE PROGRAMACIÓN Instituto
TECNOLÓGICO
Ingeniería en Sistemas Computacionales Tecnológico
NACIONAL
DE MÉXICO de la Costa Grande
Unidad II “Aplicaciones web”

Archivos de política de seguridad


Cuando se utiliza un administrador de seguridad, en el instante en el que se cargan las clases, se asignan permisos
solicitando a un objeto del tipo Policy que asigne los permisos para el origen de código de cada clase. La clase de
política está establecida en el archivo java.security del subdirectorio jre/lib/security del directorio donde está
instalado de JRE. Por defecto dentro de este archivo está la siguiente línea:

policy.provider = sun.security.provider.PolicyFile

Es decir, los permisos se deben especificar en un fichero. La siguiente línea muestra un ejemplo de permiso en un
fichero de política de seguridad:

permission java.io.FilePermission”/tmp/_”,”read ,write” ;

Se pueden crear archivos de políticas en localizaciones prefijadas. Por defecto existen dos localizaciones:

el archivo java.policy en el directorio jre/lib/security.


el archivo .java.policy en el directorio raíz del usuario.

Estas localizaciones están establecidas por defecto en el fichero java.security de la siguiente forma:

policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy

Durante la fase de desarrollo es mejor no modificar estos ficheros estándar java.policy o .java.policy (ya que los
podríamos dejar en un estado peligroso).

Instructor: Carlos Baltazar Oliva Enero – Junio 2018 51


TOPICOS AVANZADOS DE PROGRAMACIÓN Instituto
TECNOLÓGICO
Ingeniería en Sistemas Computacionales Tecnológico
NACIONAL
DE MÉXICO de la Costa Grande
Unidad II “Aplicaciones web”

Es mejor especificar de forma explícita el archivo de políticas necesario para cada aplicación. Para ello hay que
colocar los permisos en un determinado archivo (por ejemplo aplicacion.policy
e iniciar la máquina virtual del siguiente modo:

java-Djava.security.policy=aplicacion.policyAplicacion

Para applets cargados con appletviewer se utiliza (si el fichero de política se llama applet.policy).

Appletviewer −J−Djava.security.policy=applet.policyapplet.html

El archivo de polÍticas especificado se añade a las políticas especificadas en los ficheros java.policy en el directorio
jre/lib/security y .java.policy en el directorio raíz del usuario. Si se añaade un segundo signo igual entonces solo se
utiliza el archivo de política especificado, ignorando los otros.

appletviewe r −Djava.security.policy==aplicacion.policyAlicacion

Como ya se comentó anteriormente, las aplicaciones Java ejecutadas localmente, por defecto, no instalan ningún
administrador de seguridad. Para ver el efecto de los ficheros de políticas en las aplicaciones hay que utilizar un
administrador de seguridad, para ello hay dos posibilidades:

1. Añadir la siguiente línea en el método main(.):


System.setSecurityManager( new SecurityManager()) ;

y especificar el fichero de política en la línea de órdenes,

2. o realizarlo todo desde la línea de órdenes:

java −Djava.security.manager−Djava.security.policy=aplicacion.policyAplicacion

En cuanto a los permisos, estos tienen la siguiente estructura:

permission nombreClase nombreDestino,listaAcciones

nombreClase es el nombre completo (incluyendo la información del paquete al que pertenece) de una clase de
permisos (por ejemplo java.net.SocketPermission).

nombreDestino es una especificación del permiso, en el ejemplo anterior sería especificar el servidor y quizá un
numero de puerto.

listaAcciones es también una especificación de permiso, se trata de una lista de acciones como read o connect
separadas por comas. Algunas clases de permisos no necesitan que se especifique nombreDestino o listaAcciones.

Ejemplo: ISCTAPU2EJEM009
Archivo html
<!--
Nombre del programa: ISCTAPU2EJEM009.html
Fecha de programacion: 16 de Abril de 2018
Autor :
Objetivo : Carga el appet de java ISCTAPU2EJEM009.class
-->
<HTML>
<HEAD>
<TITLE>Topicos Avanzados de programación </TITLE>
</HEAD>

Instructor: Carlos Baltazar Oliva Enero – Junio 2018 52


TOPICOS AVANZADOS DE PROGRAMACIÓN Instituto
TECNOLÓGICO
Ingeniería en Sistemas Computacionales Tecnológico
NACIONAL
DE MÉXICO de la Costa Grande
Unidad II “Aplicaciones web”

<CENTER>
<h1>
UNIDAD 2
</h1>
<h6>
"Desarrollo de aplicaciones para internet"
</h6>
<APPLET
CODE = "ISCTAPU2EJEM009.class"
WIDTH = 1000
HEIGHT = 200>
</APPLET>
</CENTER>
</HTML>

Archivo java
/***************************************************
Nombre del programa: ISCTAPU2EJEM009.java
Fecha de programacion: 16 de Abril de 2017
Autor :
Objetivo : Ejemplo de visualizacion de CampodeTexto
mediante la pulsacion de un Boton
*****************************************************/
import java.awt.*;
import java.applet.*;
public class ISCTAPU2EJEM009 extends Applet {
// Declaracion de variables objetos de clase TextField de libreria awt
TextField CampodeTexto1, CampodeTexto2;

// Declaracion de variables objetos de clase Button de libreria awt


Button Boton1, Boton2;
// Declaracion del metodo init que se ejecuta al inciar el applet
public void init() {
// Asignacion de memoria e inicializar los objetos de clase TextField
CampodeTexto1 = new TextField(" ",15);
CampodeTexto2 = new TextField(" ",25);

// Asignacion de meoria e inicializar los objetos de clase Button


Boton1 = new Button ( "Botón 1");
Boton2 = new Button ( "Botón 2");

// Asignacion de color de fondo de los objetos Button


Boton1.setBackground(new Color(153,255,0));
Boton2.setBackground(new Color(153,255,0));

// Agregar los objetos al applet en el orden que desea aparecer


// primer objeto qeu se agrega
add(Boton1);

// Segundo objeto que se agrega


add(CampodeTexto1);

// Tercer objeto que se agrega


add(Boton2);

Instructor: Carlos Baltazar Oliva Enero – Junio 2018 53


TOPICOS AVANZADOS DE PROGRAMACIÓN Instituto
TECNOLÓGICO
Ingeniería en Sistemas Computacionales Tecnológico
NACIONAL
DE MÉXICO de la Costa Grande
Unidad II “Aplicaciones web”

// Cuarto objeto que se agrega


add(CampodeTexto2);

// Asignacion de color de fondo del applet mediante la combinacion


// de 3 valores enteros, cada valor puede variar de 0 a 255
// donde se puede realizar una combinacion de 3 valores enteros
setBackground(new Color(0,153,153));
}

// Metodo para la asignacion de márgenes de 5 alrededor del applet


public Insets insets() {
return new Insets(5,5,5,5);
}

// Metodo que maneja eventos sobre el enfoque del objeto actual


public boolean action(Event evt, Object arg) {
// Compara para saber si el objeto actual es el Boton1
if (evt.target == Boton1) {
// Si es VERDADERO se realizan las siguientes acciones
// El CampoTexto1 se oculta
CampodeTexto1.setVisible(false);
// El CampoTexto2 se visualiza
CampodeTexto2.setVisible(true);
}else {
// Si es FALSO se hace la siguiente comparacion
// Compara para saber si el objeto actual es el Boton2
if (evt.target == Boton2) {
// Si es VERDADERO se realizan las siguientes acciones
// El CampoTexto1 se visualiza
CampodeTexto1.setVisible(true);
// El CampoTexto2 se oculta
CampodeTexto2.setVisible(false);
}
}
return true;
}
}
Resultado

Instructor: Carlos Baltazar Oliva Enero – Junio 2018 54


TOPICOS AVANZADOS DE PROGRAMACIÓN Instituto
TECNOLÓGICO
Ingeniería en Sistemas Computacionales Tecnológico
NACIONAL
DE MÉXICO de la Costa Grande
Unidad II “Aplicaciones web”

Ejercicio: ISCTAPU2EJER009

1) En base al ejemplo ISCTAPU2EJEM009.java debera realizar las investigacion necesaria para poder realizar la
practica
2) Debera deiseñar la interfaz para capturar
a) Nombre
B) Apellido Paterno
C) Apellido Materno
D) Fecha de nacimiento
1) Año
2) Mes
3) Dia
Bajo el siguiente formato

2018 Abril 16

3) A su vez cada uno de los datos debe tener su objeto reflejo correspondiente
4) El objeto reflejo del nombre debe tener las siguientes caracteristicas
1) Color de fondo blanco
2) Color de letra Rojo

5) El objeto reflejo del Apellido paterno debe tener las siguientes caracteristicas
1) Color de fondo Negro
2) Color de letra blanca

6) El objeto reflejo del Apellido materno debe tener las siguientes caracteristicas
1) Color de fondo Azul
2) Color de letra blanca

Practica: ISCTAPU2PRAC009
INVESTIGAR TODA LA TEORIA RELACIONADA A CADA UNO DE LOS METODOS SIGUIENTES EN SU LIBRETA
- handleEvent
- action

ELABORAR UN MAPA MENTAL EN SU LIBRETA DE CADA UNO DE LOS TEMAS INVESTIGADOS EN EL PUNTO
ANTERIOR

ELABORAR UN CUADRO COMPARTIVO EN LISTANDO LAS VENTAJAS Y DESVENTAJAS DE CADA UNO DE


ELLOS EN SU LIBRETA

Instructor: Carlos Baltazar Oliva Enero – Junio 2018 55


TOPICOS AVANZADOS DE PROGRAMACIÓN Instituto
TECNOLÓGICO
Ingeniería en Sistemas Computacionales Tecnológico
NACIONAL
DE MÉXICO de la Costa Grande
Unidad II “Aplicaciones web”

EJEMPLOS DE MENUS EN APPLET

Ejemplo1M
Archivo en java
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class Ejemplo1M extends Applet implements ActionListener, MouseListener {


Label label;
PopupMenu popup;
MenuItem menuitem1, menuitem2, menuitem3, menuitem4;

public void init(){


popup = new PopupMenu("Menu");
menuitem1 = new MenuItem("Elemento 1");
menuitem1.addActionListener(this);
menuitem2 = new MenuItem("Elemento 2");
menuitem2.addActionListener(this);
menuitem3 = new MenuItem("Elemento 3");
menuitem3.addActionListener(this);
menuitem4 = new MenuItem("Elemento 4");
menuitem4.addActionListener(this);
popup.add(menuitem1);
popup.addSeparator();
popup.add(menuitem2);
popup.addSeparator();
popup.add(menuitem3);
popup.addSeparator();
popup.add(menuitem4);
add(popup);
label = new Label("¡Hola desde Java!");
add(label);
addMouseListener(this);
}

public void mousePressed(MouseEvent e){


if(e.getModifiers() != 0){
popup.show(this, e.getX(), e.getY());
}
}

public void mouseClicked(MouseEvent e){}


public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void actionPerformed(ActionEvent event){
if(event.getSource() == menuitem1)
label.setText("Eligió el elemento 1");
else if(event.getSource() == menuitem2)
label.setText("Eligió el elemento 2");
else if(event.getSource() == menuitem3)
label.setText("Eligió el elemento 3");

Instructor: Carlos Baltazar Oliva Enero – Junio 2018 56


TOPICOS AVANZADOS DE PROGRAMACIÓN Instituto
TECNOLÓGICO
Ingeniería en Sistemas Computacionales Tecnológico
NACIONAL
DE MÉXICO de la Costa Grande
Unidad II “Aplicaciones web”

else if(event.getSource() == menuitem4)


label.setText("Eligió el elemento 4");
}
}

Archivo en html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
</head>
<body bgcolor="000000">
<center>
<applet
code = "MenuEmergente.class"
width = "500"
height = "300"
>
</applet>
</center>
</body>
</html>

Ejemplo2M
Archivo en java
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

class frame extends Frame implements ActionListener {


Menu menu;
MenuBar menubar;
MenuItem menuitem1, menuitem2, menuitem3;
Label label;

frame(String title){
super(title);
label = new Label("¡Hola desde Java!");
setLayout(new GridLayout(1, 1));
add(label);
menubar = new MenuBar();
menu = new Menu("Archivo");
menuitem1 = new MenuItem("Elemento 1");
menu.add(menuitem1);
menuitem1.addActionListener(this);
menuitem2 = new MenuItem("Elemento 2");
menu.add(menuitem2);
menuitem2.addActionListener(this);
menuitem3 = new MenuItem("Elemento 3");
menu.add(menuitem3);
menuitem3.addActionListener(this);
menubar.add(menu);

Instructor: Carlos Baltazar Oliva Enero – Junio 2018 57


TOPICOS AVANZADOS DE PROGRAMACIÓN Instituto
TECNOLÓGICO
Ingeniería en Sistemas Computacionales Tecnológico
NACIONAL
DE MÉXICO de la Costa Grande
Unidad II “Aplicaciones web”

setMenuBar(menubar);
addWindowListener(new WindowAdapter() {public void
windowClosing(WindowEvent e) {setVisible(false);}});
}

public void actionPerformed(ActionEvent event){


if(event.getSource() == menuitem1){
label.setText("Eligió el elemento 1");
} else if(event.getSource() == menuitem2){
label.setText("Eligió el elemento 2");
} else if(event.getSource() == menuitem3){
label.setText("Eligió el elemento 3");
}
}
}

public class Ejemplo2M extends Applet implements ActionListener{


Button b1;
frame menuWindow;

public void init(){


b1 = new Button("Visualizar el menú de la ventana");
add(b1);
b1.addActionListener(this);
menuWindow = new frame("Menús");
menuWindow.setSize(200, 200);
}

public void actionPerformed(ActionEvent event){


if(event.getSource() == b1){
menuWindow.setVisible(true);
}
}
}

Archivo en html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
</head>
<body bgcolor="000000">
<center>
<applet
code = "Ejemplo2M.class"
width = "500"
height = "300"
>
</applet>
</center>
</body>
</html>

Instructor: Carlos Baltazar Oliva Enero – Junio 2018 58

Вам также может понравиться