Estándares Java v1.0
Estándares Java v1.0
Página.1 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
INDICE
1. INTRODUCCIÓN..........................................................................................................................................4
2. ESTANDARES DE PROGRAMACION......................................................................................................5
2.1. ESTÁNDARES DE NOMENCLATURA DE JAVA................................................................................................5
2.1.1. Notación de Paquetes..........................................................................................................................5
2.1.2. Notación de Clases.............................................................................................................................6
Notación General de Clases.............................................................................................................................6
Notación de Clases Java Beans........................................................................................................................7
Notación de las clases Action...........................................................................................................................7
Notación de las clases ActionForm..................................................................................................................8
Notación de las clases DAO..............................................................................................................................8
Notación de las clases Util................................................................................................................................8
2.1.3. Notación de Interfaces........................................................................................................................9
2.1.4. Notación de Atributos.........................................................................................................................9
2.1.5. Notación de Métodos..........................................................................................................................9
2.1.6. Notación de Variables.......................................................................................................................10
2.1.7. Notación de Constantes.....................................................................................................................10
3. ESTANDARES DE BASE DE DATOS......................................................................................................11
3.1. CONEXIÓN SQL........................................................................................................................................11
3.2. LIBERAR RECURSOS..................................................................................................................................11
3.3. LÓGICA DE PERSISTENCIA..........................................................................................................................11
3.4. MANEJO DE EXCEPCIONES.........................................................................................................................12
3.5. USO DE VALORES MONETARIOS.................................................................................................................12
3.6. CREAR LAS CLASES DAO..........................................................................................................................12
DAO TIPO IBATIS................................................................................................................................................13
4. PRACTICAS DE DESARROLLO..............................................................................................................16
4.1. DEFINICIÓN DE COMENTARIOS..................................................................................................................16
4.2. DOCUMENTACIÓN DE CLASES E INTERFACES.............................................................................................16
4.3. DOCUMENTANDO LOS CONSTRUCTORES....................................................................................................16
4.4. DOCUMENTACIÓN DE FUNCIONES MIEMBRO..............................................................................................16
4.5. DOCUMENTACIÓN DE CAMPOS MIEMBRO...................................................................................................17
4.6. DOCUMENTACIÓN DE CLASES IMPLEMENTADAS........................................................................................17
4.7. BLOQUE DE COMENTARIOS.......................................................................................................................17
4.8. COMENTARIOS DE UNA LÍNEA...................................................................................................................17
4.9. COMENTARIOS FINALES............................................................................................................................18
4.10. NOTACIÓN PARA LOS ARCHIVOS JSP Y HTML..........................................................................................18
4.11. RECOMENDACIONES GENERALES DE PROGRAMACIÓN...............................................................................19
4.11.1. Recomendaciones de optimización....................................................................................................19
4.11.2. JDBC...............................................................................................................................................19
4.11.3. Excepciones......................................................................................................................................20
4.11.4. JSP...................................................................................................................................................21
LIBRERÍAS DE ETIQUETAS (TAGLIBS) DE SOPORTE PARA LA CONSTRUCCIÓN DE JSPS......................................21
COMENTARIOS.....................................................................................................................................................21
SOPORTE PARA ACENTUACIÓN............................................................................................................................22
Página.2 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Página.3 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
1. INTRODUCCIÓN
Presentar la guía de los estándares a utilizarse en la Programación, a ser desarrollado en arquitectura
distribuida (entorno multicapa) para aplicaciones Web, utilizando Java 1 como lenguaje de programación.
Estándares de Programación, donde se indica la nomenclatura a ser utilizada para nombrar los
programas elaborados en lenguaje Java2.
1
Java: Lenguaje de programación orientado a objetos..
2
Se incluye en la presente guía la nomenclatura de paginas JSP.
Página.4 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
2. ESTANDARES DE PROGRAMACION
En esta sección se detallan los estándares de nomenclatura que se usan en los diferentes Objetos Java
durante el desarrollo de una aplicación. Estas notaciones se basan en las recomendaciones de los
creadores de Java y se aplican sobre los siguientes componentes:
1. Paquetes
2. Clases
3. Atributos
4. Interfaces
5. Atributos
6. Métodos
7. Variables
8. Constantes
Ejemplo:
Página.5 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
El Objeto Clase de Java en un proyecto web puede extender del Objeto tipo: Action, ActionForm,
Exception, Interface, Abstracta, Bean, DAO, Util.
Luego del prefijo se añadirá el nombre que representa de la mejor manera la funcionalidad de la
clase.
En el Caso de que este nombre sea una composición de varias palabras se tomará las cuatro
primeras letras de estas excepto en el caso de la ultima palabra que compone el nombre que estará
en su totalidad de letras.
Ejemplo
Página.6 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Los Java Beans, son las clases que representan alguna identidad, tabla o vista de base de datos y
estas deben contener los atributos correspondientes a los datos con el modificador private y los
métodos setters y getters (públicos) para acceder a dichos atributos.
En cuanto al nombre de las clases este debe ser iniciado con el prefijo del identificador del tipo de
clase en mayúsculas: Bean para Java Beans.
<nombreJavaBean>Bean
Ejemplo
ComprobanteServicioBean (Representa el objeto bean con los atributos del comprobante de
servicio).
Las clases que extienden del objeto Action, son las clases encargadas de la comunicación de los
JSP y DAO. El nombre de esta clase comienza con la letra mayúscula y el sufijo Action.
El prefijo de la clase Action puede ser Listar o Mostrar, dependerá del comportamiento de la clase.
Listar se usa al realizar acciones de Buscar, Eliminar, Grabar, Actualizar y el prefijo Mostrar se
utiliza al ingresar a la opción de la aplicación, relacionado a la accion: Listar
Luego del prefijo se coloca el nombre más representativo relacionado con el nombre de Opción de
la aplicación.
Notación:
<prefijo><nombreClase>Action
Ejemplo
ListarHMF2006Action (Búsqueda del formulario de Abonos).
Las clases que extienden del objeto ActionForm son las clases encargadas de encapsular los
valores del formulario, tiene un comportamiento similar a JavaBean.
El nombre de esta clase no tiene prefijo, el nombre de esta clase comienza en mayúscula.
El nombre será el más representativo que encapsula la información del formulario y el sufijo Form.
Notación:
<nombreClaseActionForm>Form
Ejemplo
Página.7 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Mostrar2006Form (Clase que tiene los tipos de datos del formulario Abonos).
Las clases tipo DAO son las clases encargadas de la comunicación con la base de datos.
Se crea una clase de tipo Interface y se extiende de ella para sobrescribir los métodos.
El nombre de la clase DAO no tiene prefijo, el nombre comienza con la primera letra en mayúscula.
Deberá de ingresar el nombre será el más representativo seguido del sufijo DAOImpl.
Notación:
<nombreClaseDAO>DAOImpl
Ejemplo
Mostrar2006DAOImpl (Clase Implementada de Abonos).
Las clases tipo Util son las clases personalizadas que contienen métodos que servirán en la
ejecución de un proceso independiente del framework, generalmente se utiliza para procesos de
texto, lectura de archivos, formato de fecha, conversiones numéricas, etc.
El nombre de la clase Util no tiene prefijo, el nombre comienza con la primera letra en mayúscula.
Deberá de ingresar el nombre será el más representativo seguido del sufijo Util.
Notación:
<nombreClaseUtil>Util
Ejemplo
CadenaUtil (Clase que contiene método de operación de cadenas de texto).
Página.8 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Ejemplo:
String tipoUnidMonetaria (Cadena que representa el tipo de unidad monetaria).
Ejemplos:
validaNumero().
cargarLista().
Ejemplo:
int idx = 0 (variable entera para realizar bucles).
Página.9 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
El tipo de constante debe ser definido como un atributo publico, estático (pueda ser leído desde
cualquier clase) y final (no permite la modificación del valor asignado).
La clase que contiene las constantes debe ser nombrada como: Constante<aplicación o modulo>.
Ejemplos:
//Tipo de operación
public static final String TIPO_OPERACION_DEPOSITO="DEPO";
public static final String TIPO_OPERACION_FALTANTE="FALT";
public static final String TIPO_OPERACION_SOBRANTE="SOBR";
Página.10 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Importante: Estos métodos serán usados solamente si se implementa DAO con JDBC; pero si se
implementan con Ibatis, será el framework el que se encargue de crear la conexión SQL sin requerir
la intervención del programador.
El desarrollador es responsable de cerrar los objetos que ha abierto para trabajar con JDBC o
SQL. Para esto llamará al método con.close() por cada objeto abierto.
El framework se encargará de cerrar las conexiones.
Clases con el patrón DAO (Data Access Object): Son interfaces que esconden la lógica de
manejo de acceso a fuentes de datos (Por ejemplo Bases de datos) sirviendo así de puente
entre un sistema orientado a objetos hecho en lenguaje java y otro que habla en lenguaje de
persistencia y recuperación de datos, como es el SQL. Esta separación favorece la
mantenibilidad del código.
Clases que utilizan JDBC para acceder a Bases de datos relacionales.
Página.11 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Se debe usar Bigdecimal para guardar valores monetarios. Evitar el uso del tipo de dato Float y
Double para almacenar valores monetarios, esto es debido a que no guardan correctamente los
decimales.
Los DAO tipo Ibatis extienden de SqlMapClientDaoSupport, que es el conector que ofrece
Spring para trabajar con Ibatis.
Página.12 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Los DAO tipo JDBC extienden de JDBCDAOAbstract, que es el conector que ofrece Spring
para trabajar con JDBC y además tiene los métodos getConnection() y
getNativeConnection().
Observar que el DAO Ibatis depende del archivo “sqlMapSecurity.xml”, este es el archivo
que contiene los queries a ser usados para acceder al objeto de base de datos (Tabla
IntentoUsuario en este caso).
Todo DAO debe ser inscrito en el archivo “propiedadesDAO.xml”, como muestra el ejemplo:
<!—DAO-->
<bean id="seguridadDAO" class="pe.com.hermes.dao.jdbc.SeguridadJDBC">
<property name="dataSource"><ref bean="hermeticDS"/></property>
</bean>
<bean id="intentoUsuarioDAO"
class="pe.com.hermes.dao.ibatis.IntentoUsuarioIbatis">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="sqlMapClient"><ref local="ibatisSqlConfig"/></property>
</bean>
Notar que los DAO, al momento de ser inscritos en el XML, pueden acceder a diferentes
bases de datos.
Además, observar que los DAO tipo Ibatis requieren el atributo “sqlMapClient”, este atributo
apunta al archivo de configuración de Ibatis. Este archivo es el “ibatisSqlConfig.xml” y es
como sigue:
<!-- colocar aqui los sqlMapXXXX.xml de los modulos -->
<sqlMap resource="pe/com/hermes//dao/ibatis/sqlMapAbono.xml"/>
<sqlMap resource=" pe/com/hermes//dao/ibatis/sqlMapGCO.xml"/>
<sqlMap resource=" pe/com/hermes//dao/ibatis /sqlMapEmpresa.xml"/>
Es en este archivo en donde se inscriben los archivos “sqlMap” por cada módulo.
Regla: Un módulo puede tener más de un archivo sqlMap.
Regla: El (los) archivo(s) sqlMap del módulo DEBEN estar ubicados en la carpeta
pe/com/hermes//dao/ibatis para su fácil acceso.
El archivo “sqlMapSecurity” es el que contiene las operaciones a las tablas de ese módulo.
Este archivo es como sigue:
<sqlMap namespace="security">
<typeAlias alias="intento" type=" pe.com.hermes.bean.IntentoUsuarioBean"/>
Página.13 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
WHERE
NOM_USR = #llave#
</select>
</sqlMap>
Página.14 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Página.15 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
4. PRACTICAS DE DESARROLLO
Utilizar el siguiente bloque de comentario como plantilla para cada clase e Interface declarada:
/**
* Resumen.
* Descripción detallada
*
* @author Juan Torres
* @version 1.00, 20/12/2009
*
*/
Utilizar el siguiente bloque de comentario como plantilla para cada función miembro declarada:
/**
* Resumen.
* Descripción detallada
*
Página.16 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Las variables de clase o de Instancia deben ser comentadas utilizando la siguiente plantilla.
Los comentarios de implementación no serán tomados en cuenta por el javadoc, se utilizarán para comentar
código referente a la implementación. Tendremos tres formas para comentar de bloque, línea, de fin de
línea:
/*
* Aquí un bloque de comentarios
*/
4.8. Comentarios de una Línea
Los comentarios cortos pueden aparecer como una sola línea identada al nivel del código que la sigue. Si
un comentario no se puede escribir en una sola línea, debería seguir el formato de los bloques de
comentario. Un comentario de una sola línea debería ir precedido de una línea en blanco. Aquí tenemos un
ejemplo:
int i = 0;
/* Manejando la Condición. */
if (condition) {
...
}
Página.17 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
if (cliente.equals(empleado)) {
...
} else{
return false; //no es un cliente.
}
Opción Prefijo
Administración ad
Mantenimiento Mn
Transacción Tr
Consulta cs
Reportes rp
<PrefijoOcion>accion.jsp
Ejemplo
rpListarPedidos.jsp
Nota: Los jsp que son de uso general no llevarán el prefijo de opción.
ejemplo : Login.jsp , Error.jsp.
Página.18 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
4.11.1.Recomendaciones de optimización
Se recomienda usar el patrón singleton (solo una instancia para toda la aplicación) para clases utilitarias
comunes.(Es una buena opción para disminuir el número de variables de contexto).
Minimizar el Uso de System.out.println ya que involucran procesos de I/O, utilizar log4j.
Usar StringBuffer (Para concatenaciones grandes).
Usar líneas de código de menos de 80 caracteres.
4.11.2. JDBC
La Estructura a emplearse en el caso se realicen las conexiones a Base de Datos será siempre la siguiente:
Try
{
//Uso de JDBC
}
catch(Exception ex)
{
//Manejar excepción y hacer rollback
}
finally
{
//cerrar conexiones clase utilitaria
}
Usar los conceptos de Datasource por JNDI y Pool de Conexiones usando las clases proporcionadas
por Oracle ya que están adaptadas a los productos del proveedor e implementan una mejor forma
(comprobada) de administrar las conexiones.
Página.19 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Como regla se deben liberar o cerrar siempre las conexiones u objetos de jdbc, para esto se utilizará
una clase utilitaria dedicada al cierre de conexiones y a la liberación de las conexiones para la
administración del Pool de Conexiones, Statements, PreparedStatements y Resultset etc.
Las conexiones a base de datos deben ser hechas en las clases de control (servlets) y esta debe ser la
responsable de asignarla a las clases que necesiten hacer operaciones a base de datos así como de
cerrar o liberar dicha conexión.
4.11.3. Excepciones
Toda excepción debe ser controlada inclusive si se advierten excepciones del tipo Runtime.
Las Excepciones se deben manejar generalmente en las clases de control (Ejemplo Servlets), ya que
estas son las clases que manejan el flujo de la aplicación.
Se debe enviar a consola un mensaje de la excepción () además de controlar siempre que el flujo de la
aplicación continúe (redirección a páginas de error).
No se debe usar la impresión del Stack Trace (esta se usa solo para el momento del debug)
Página.20 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
4.11.4.JSP
Minimizar el Uso de objetos de sesión (si se usarán, removerlos al final de la operación con estos).
En cuanto al uso de Forward y Redirect (Se recomienda el uso de Forward ya que este no crea un
nuevo objeto request).
Usar paginas de Error (Se contará con al menos una pagina de error por funcionalidad)
Usar Tags Personalizados para tareas comunes y repetitivas (ejem: para mostrar listas).
El Framework Struts proporciona librerías de etiquetas (TagLibs) que contiene lógica reutilizable que
facilita la construcción de páginas JSPs, además el uso de tagLibs reduce la inclusión de código
java dentro de las páginas JSP.
El desarrollador puede aplicar estos taglibs en los JSPs; pero también puede aplicar código java en
aquellos casos en los que usar un tagLib sea insuficiente o represente una complicación mayor a la
inclusión de código java. En la construcción de páginas JSP se pretende minimizar la inclusión de
código java, no eliminarlo por completo.
Comentarios
Dentro de los archivos JSP, los comentarios deben ser agregados usando la sintaxis JSP "<%--" y
no la sintanxis HTML"<%--".
Página.21 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Toda página web JSP debe empezar con la siguiente línea, para evitar la necesidad de colocar
acentos con el tag "accute":
La siguiente tabla indica los prefijos a utilizar para nombrar objetos HTML a utilizar dentro de las
páginas JSP
Página.22 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
5. ESTANDARES DE SEGURIDAD
Definición
Consiste en saltar la verificación del Control de Acceso. Muchos sitios requieren que los usuarios pasen por
ciertas verificaciones antes de que se les garantice el acceso a ciertos URLs que están típicamente
colocados ‘más profundamente’ en el sitio. Estas verificaciones no deben ser evitadas por un usuario que
simplemente se salta la página que contiene la verificación de seguridad.
Vulnerabilidad
URL “ocultas” o “especiales”, suministradas sólo a administradores o usuarios con privilegios, pero
accesibles a todos los usuarios si ellos saben que existen, tales como
/administrar/agregarusuario.php/aprobarTransferencia.do.
Estándar
Todas las aplicaciones Web, deben ser accedidas desde una pagina principal y enmascarar el URL, y el
Browser donde se cargara el sistema debe ser estar maximizado y no contar con menús, ni botones de
navegación. Para tal efecto se debe utilizar la siguiente función Java Script:
// función para abrir ventana maximizada
function abreventanaMax( aURL, aWinName )
{
var wOpen;
var sOptions;
sOptions = 'directories=no,status=yes,toolbar=no,menubar=no,scrollbars=yes';
sOptions = sOptions + ',resizable=yes,location=no,maximize=yes';
sOptions = sOptions + ',width=' + (screen.availWidth - 12).toString();
sOptions = sOptions + ',height=' + (screen.availHeight - 122).toString();
sOptions = sOptions + ',screenX=0,screenY=0,left=0,top=0';
Definición
Página.23 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Consiste en saltar la verificación del Control de Acceso. Muchos sitios requieren que los usuarios pasen por
ciertas verificaciones antes de que se les garantice el acceso a ciertos URLs que están típicamente
colocados ‘más profundamente’ en el sitio. Estas verificaciones no deben ser evitadas por un usuario que
simplemente se salta la página que contiene la verificación de seguridad.
Vulnerabilidad
URL “ocultas” o “especiales”, suministradas sólo a administradores o usuarios con privilegios, pero
accesibles a todos los usuarios si ellos saben que existen, tales como
/administrar/agregarusuario.php/aprobarTransferencia.do.
Estándar
Evitar el acceso a poder ver el código fuente de las pagina html del sistema. Para ello, se debe bloquear el
botón secundario de Mouse, para tal efecto se debe utilizar la siguiente funcion Java Script, dentro del
cuerpo de la pagina html (body):
<html>
<head>
<title>Pagina Web</title>
<body>
<SCRIPT language=JavaScript>
function click()
{
if(event.button==2){
alert(' HERMES TRANSPORTES BLINDADOS);
}
}
document.onmousedown=click
</SCRIPT>
</body>
</html>
aMessage: mensaje que se mostrara cuando se presione el botón derecho del Mouse sobre la
pagina html.
Se debe bloquear las teclas de shortcut que vienen por defecto en la mayoría de los browser, dado que
estas permiten abrir el sistema en un nuevo browser que cuenta con los menús y botones de navegación:
ctrl + U, el uso de la combinación Shif + “Clic izquierdo” , el uso de la tecla F11. Considerar que los
shortcut, varían dependiendo del navegador y del idioma del mismo:
Página.24 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Para suprimir las teclas Control, para tal efecto utilizar el siguiente java script:
<html>
<head>
<script language="JavaScript">
function salir(evt)
{
if(evt.keyCode == 17 || evt.keyCode == 122)
{
alert("HERMES TRANSPORTES BLINDADOS");
if (evt.keyCode == 122) {
document.location='ruta de la pagina de acceso restringido';
}
return 0; //false;
}
}
</script>
</head>
<body onKeyDown="salir(event)" onKeyUp="salir(event);">
Pulsa el boton control.
</body>
</html>
Reemplazar el uso del link html (<A href=''direccionWeb'' > Enlace </A>) por Java Script que redirecciones las paginas, tales
como:
Observación: Los Java script de validación y restricción de usos de teclas deben estar incorporadas en un archivo tipo
liberaría para ser reutilizados por todas las paginas del sistema: por ejemplo “LibreriasJS.js”
Definición
La Navegación Forzada consiste en saltar la verificación del Control de Acceso. Muchos sitios requieren que
los usuarios pasen por ciertas verificaciones antes de que se les garantice el acceso a ciertos URLs que
están típicamente colocados ‘más profundamente’ en el sitio. Estas verificaciones no deben ser evitadas por
un usuario que simplemente se salta la página que contiene la verificación de seguridad.
Vulnerabilidad
Las aplicaciones a menudo permiten el acceso a archivos “ocultos”, tales como XML estáticos o reportes
generados por el sistema, confiando en la seguridad por oscuridad para ocultarlos.
Estándar
o Configuración del lado del servidor OAS
Página.25 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
HTML
GRAFICOS (GIFTS, JPGS)
DOCUM,ENTOS PDF, DOC, XLS, TXT
JSP
Definición
La Navegación Forzada consiste en saltar la verificación del Control de Acceso. Muchos sitios requieren que
los usuarios pasen por ciertas verificaciones antes de que se les garantice el acceso a ciertos URLs que
están típicamente colocados ‘más profundamente’ en el sitio. Estas verificaciones no deben ser evitadas por
un usuario que simplemente se salta la página que contiene la verificación de seguridad.
Vulnerabilidad
Código que implementa una política de control de acceso no actualizado o insuficiente. Por ejemplo,
imagine /aprobarTransferencia.do que alguna vez estuvo disponible para todos los usuarios, pero ahora se
solo está disponible a los ‘aprobadores’.
Estándar
o Implementar la validación del acceso por perfil de usuario, para cada acción que se realice en el
aplicativo.
Esta validación debe estar incluida como parte de las librerías de seguridad (actualmente está
incorporado en la clase “Util”) que se utilizara para todos los aplicativos Web, y debe ser llamado desde
todos los archivos que gestionan el flujo de la aplicación(Action), se describe un ejemplo del uso de la
librería :
if (request.getSession().getAttribute("usuario") == null)
response.sendRedirect("../hermetic/sessionFinish.jsp");
Definición
Página.26 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
La Navegación Forzada consiste en saltar la verificación del Control de Acceso. Muchos sitios requieren que
los usuarios pasen por ciertas verificaciones antes de que se les garantice el acceso a ciertos URLs que
están típicamente colocados ‘más profundamente’ en el sitio. Estas verificaciones no deben ser evitadas por
un usuario que simplemente se salta la página que contiene la verificación de seguridad.
Vulnerabilidad
Código que evalúa privilegios en el cliente pero no en el servidor.
Estándar
o Las aplicaciones deben considerar dos niveles de validación.
Autenticación de usuario
Verificación del tamaño y/o formato ingresado para la cuenta de usuario
Verificación del tamaño y/o formato ingresado para el la contraseña de usuario(Evaluar si aplica
por medidas de seguridad)
En toda la aplicación:
Las validaciones que se realicen, deben utilizar en la medida que se pueda LÓGICA DE
PREDICADO (REVISAR y DOCUMENTAR) para los JavaEscript.
Se debe minimizar la incorporación de lógica de procesos o transaccional en los JavaScript.
Definición
La Navegación Forzada consiste en saltar la verificación del Control de Acceso. Muchos sitios requieren que
los usuarios pasen por ciertas verificaciones antes de que se les garantice el acceso a ciertos URLs que
están típicamente colocados ‘más profundamente’ en el sitio. Estas verificaciones no deben ser evitadas por
un usuario que simplemente se salta la página que contiene la verificación de seguridad.
Página.27 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Vulnerabilidad
creando una matriz para definir los roles y las funciones de la aplicación es un paso clave en el logro de la
protección contra las fallas de restricción de acceso a URL.
Estándar
Utilizar el componente de seguridad para aplicaciones Web Java.
Definición
La Navegación Forzada consiste en saltar la verificación del Control de Acceso. Muchos sitios requieren que
los usuarios pasen por ciertas verificaciones antes de que se les garantice el acceso a ciertos URLs que
están típicamente colocados ‘más profundamente’ en el sitio. Estas verificaciones no deben ser evitadas por
un usuario que simplemente se salta la página que contiene la verificación de seguridad.
Vulnerabilidad
Los archivos de librerías, especialmente si tienen una extensión ejecutable tal como .jsp, cuando sea
posible, deben mantenerse fuera del directorio raíz de la Web. Se debe verificar que no están siendo
accedidas directamente, por ejemplo, revisando una constante que solo puede ser creada por el llamante de
la biblioteca.
Estándar
Mantener las librerías ejecutables (TRANSACCIONALES) fuera del directorio raíz web, por ende fuera del
archivo War de despliegue. En la medida que se pueda no debe publicarse (validar factibilidad).
- DIVIDIR CONTENIDO ESTATICO (SERVIDOR WEB) DE PAGINAS DINAMICAS (OAS). JESUS CAÑARI
(VALIDAR)
Definición
La Navegación Forzada consiste en saltar la verificación del Control de Acceso. Muchos sitios requieren que
los usuarios pasen por ciertas verificaciones antes de que se les garantice el acceso a ciertos URLs que
están típicamente colocados ‘más profundamente’ en el sitio. Estas verificaciones no deben ser evitadas por
un usuario que simplemente se salta la página que contiene la verificación de seguridad.
Página.28 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Vulnerabilidad
Bloquear el acceso a todos los tipos de archivo que su aplicación no deberá servir nunca. Lo ideal sería que
este filtro siga el método “aceptar buenos conocidos” y sólo permita tipos de archivos que usted tiene la
intención de servir, por ejemplo .html, .pdf, .php. Esto bloqueara cualquier intento de acceder archivos de
bitácora, archivo XML, etc., que nunca tuvo la intención de servir directamente.
Estándar
Configurar en el servidor de aplicaciones (OAS), que los documentos publicados, solo contemple aquellos
archivos que deben ser accedidos por los usuarios.
Definición
Las fallas de inyección permiten a los atacantes transmitir código malicioso a otro sistema a través de una
aplicación Web. Estos ataques incluyen:
- Llamadas al sistema operativo mediante llamadas al sistema,
- El uso de programas externos vía interfaces de comando
- Y también llamadas a servidores de soporte de bases de datos mediante SQL
La finalidad del ataque es realizar tareas sobre la base de datos y de ser posible sobre host mismo,
teniendo resultados que van desde la alteración de un dato hasta apoderarse del servidor.
Vulnerabilidad
Mandar instrucciones SQL adicionales a partir de un campo o un parámetro de entrada.
Estándar
o La aplicación debe llamar al procedimiento que se encuentra en el motor de bases de datos
(STORE PROCEDURES). No se debe armar la consulta en la aplicación. La utilización de
Prepared Statements hace referencia a un tipo de consultas SQL que no se ejecutan concatenando
cadenas de caracteres.
o Manejo de variables por parámetros.
o Ejecutar las sentencias SQL o invocar Procedimientos Almacenados con una cuenta con privilegios
mínimos. Nunca emplear una cuenta con privilegios de administrador, a menos que sea inevitable.
o Conceder permisos de ejecución únicamente a Objetos de base de datos (ej: Procedimientos
Almacenados) propios desde los cuales, a manera de "wraper", se realicen las consultas a las
tablas de Usuario y llamados a los Procedimientos Almacenados del Sistema que se requieran en
las aplicaciones, y negar el acceso directo a éstos últimos y a las Tablas de Usuario.
Página.29 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Página.30 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
donde:
CatalogName corresponde al nombre del catálogo de mensajes de error. Este valor también sirve para
definir el catálogo en el objeto SystemConfiguration.
KeyName es el nombre de la clave de mensaje.
MessageText es una cadena que se muestra en la interfaz gráfica de usuario. Este texto puede
contener etiquetas HTML y variables.
Las entradas del nuevo catálogo de mensajes debe configurarse para estar disponibles en el sistema.
Definición
Trata sobre las entradas que contiene pequeños programas para ser ejecutados en el navegador de otros
usuarios, es decir el ataque está basado en la explotación de vulnerabilidades del sistema de validación de
HTML incrustado. Esta vulnerabilidad puede estar presente de forma directa (foros, mensajes de error) o
indirecta (redirecciones, framesets).
Ejemplo:
<%
out.println( "Hay " + cantidad + "de resultados encontrados con su búsqueda " + request.getParameter ("parametro") );
%>
cuando se realice la búsqueda del termino <script>alert(“xss”)</script>", una vez haya cargado la página nos aparecerá una
ventana de alerta diciendo “xss” en vez de mostrarnos el texto tal cual lo escribimos. Esto se debe a que no filtramos los datos
introducidos por el usuario.
Vulnerabilidad
El atacante desea inyectar código de Java Script incrustado.
Estándar
Se debe aplicar la siguiente función a fin de validar el ingreso de caracteres especiales, en aquellos lugares
donde no se espera ningún carácter especial, tales como: < > ( ) # &. Para tal efecto se debe utilizar la
función:
AFINAR FUNCIONES
limpiarSQLInjectionBusqueda que se encuentra en la clase com.pe.hermes.hermetic.web.util
Definición
Trata sobre las entradas que contiene pequeños programas para ser ejecutados en el navegador de otros
usuarios, es decir el ataque está basado en la explotación de vulnerabilidades del sistema de validación de
Página.31 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
HTML incrustado. Esta vulnerabilidad puede estar presente de forma directa (foros, mensajes de error) o
indirecta (redirecciones, framesets).
Ejemplo:
<%
out.println( "Hay " + cantidad + "de resultados encontrados con su búsqueda " + request.getParameter ("parametro") );
%>
cuando se realice la búsqueda del termino <script>alert(“xss”)</script>", una vez haya cargado la página nos aparecerá una
ventana de alerta diciendo “xss” en vez de mostrarnos el texto tal cual lo escribimos. Esto se debe a que no filtramos los datos
introducidos por el usuario.
Vulnerabilidad
El código inyectado es permanentemente almacenado en el servidor objetivo.
Estándar
Para evitar la ejecución del código JavaScript que ya se encuentra en la base de datos, se debe manejar la
salida codificada para MITIGAR las vulnerabilidades XSS evitando que scripts insertados sean transmitidos
a los usuarios en una forma ejecutable. En todas las salidas generadas, se debe convertir los caracteres
especiales a su codificación HTML apropiada. Para tal efecto se debe utilizar la función:
Definición
Esto ocurre cuando una aplicación Web permite el acceso a contenido y funciones a algunos usuarios y a
otros no, debido a que estas verificaciones son desarrolladas después de la autenticación, y aplica sobre las
acciones que pueden realizar los usuarios “autorizados”
Vulnerabilidad
Las características por validar que se presentan en las aplicaciones web son las siguientes:
o El usuario puede visualizar el contenido no autorizado, puede crear, alterar o borrar contenido de
otro perfil.
o El usuario puede realizar funciones no autorizadas, como acceder a la administración del aplicativo
web.
o Las interfases a las cuales solamente los administradores autorizados tienen el acceso permitido.
Estándar
Página.32 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Implementar la validación del acceso de la acción por perfil del usuario logeado al aplicativo Web.
o Crear una matriz de Perfil vs Opciones (Acción) usado como entrada para realizar la validación de
las acciones por opción correspondiente a la opción por perfil del usuario (ver Tabla).
o El código que implementa la política de control de acceso debe estar bien estructurado, ser modular
y centralizado, la validación de acceso se debe implementar en los objetos Action y JSPs del
aplicativo web) (ver código).
o Incluir cabeceras HTTP y meta etiquetas (“meta tags”), para asegurar que las páginas que
contienen información sensitiva no sean capturadas en caché por el navegador del usuario.
01 Opcion01 Consultar X X X
01 Opcion01 Eliminar X X
01 Opcion01 Crear X
01 Opcion01 Modificar X
02 Opcion02 Consultar X X X
02 Opcion02 Eliminar X
02 Opcion02 Crear X
02 Opcion02 Modificar X X
03 Opcion03 Consultar X X
03 Opcion03 Eliminar X
03 Opcion03 Crear X
03 Opcion03 Modificar X
Modo de empleo:
En la sesión del proyecto Web se almacena en el momento de logeo el listado “listadoAcceso”, el cual
posee el total de acciones por opciones asignado al perfil del usuario:
Por ejemplo aquí se muestra la carga de acciones de las opciones para el Perfil N, puede “consultar”,
“eliminar” sobre la opcion01 y “Consultar” y “Modificar” sobre la opción02.
//acciones de la opcion01
List listadoAcceso = new ArrayList();
ModuloUsuarioBean moduloUsuarioBean = new ModuloUsuarioBean();
moduloUsuarioBean.setCodigo(“01”);
moduloUsuarioBean.setAccion(“Consultar”,”Eliminar”);
listadoAcceso.add(moduloUsuarioBean);
//acciones de la opcion02
moduloUsuarioBean = new ModuloUsuarioBean();
moduloUsuarioBean.setCodigo(“02”);
moduloUsuarioBean.setAccion(“Consultar”,”Modificar”);
listadoAcceso.add(moduloUsuarioBean);
session.setAttribute(“listadoAcceso”, listadoAcceso);
El código de validación de la acción por opción, se debe incluir en cada Clase tipo Action (Usar la librería hermesUtil, usar el método
validaAccesoTercerNivel).
Página.33 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Usar la librería hermesUtil.jar, el cual posee la Clase HermesValidaAcceso con el método que realiza la validación de tercer Nivel
(accion por opcion del perfil).
Incluir en el JSP el metatag, para no almacenar la página el área de cache del explorador.
<meta http-equiv="expires" content="-1" >
Incluir el metatag Pragma con el valor “no-cache”, este no utiliza la caché del explorador para guardar la
página.
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
Definición
La administración de autenticación y sesión incluye todos los aspectos del manejo de la autenticación de
usuario y la administración de sesiones activas. La autenticación es un aspecto crítico de este proceso,
pero inclusive mecanismos de autenticación sólidos pueden ser minados por funciones de administración de
credenciales defectuosas, incluyendo el cambio de contraseña, olvidé mi contraseña, recordar mi
contraseña, actualización de cuenta y otras funciones relacionadas. Porque los ataques de paso (“walk by”)
son probablemente dirigidos a muchas aplicaciones Web, todas las funciones de administración de cuentas
deben requerir re-autenticación aun si el usuario tiene un id de sesión válido.
Página.34 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Vulnerabilidad
Las características por validar en las aplicaciones web son las siguientes:
o Verifique los mecanismos de autenticación para asegurar que las credenciales de usuario están
protegidas en todo momento (almacenadas, en transito, durante el login).
Estándar
Implementar la validación del la administración de forma segura las credenciales de los usuarios (Se usara
como estándar para el desarrollo del proyecto de Seguridad).
- Contraseñas Resistentes: las contraseñas deben tener restricciones que impongan un tamaño y
complejidad mínima. La complejidad típicamente requiere el uso de combinaciones mínimas de
caracteres alfabéticos, numéricos, y/o no-alfanuméricos en la contraseña de usuario. A los usuarios
se les debe requerir cambiar su contraseña periódicamente. A los usuarios se les debe impedir re-
utilizar contraseñas anteriores.
- Almacenamiento de Contraseña: todas las contraseñas deben ser almacenadas ya sea de forma
encriptada o como hashes para protegerlas de ser expuestas, independientemente de donde son
almacenados. La forma de hash es preferible ya que no es reversible. La encriptación debe ser
usada cuando se necesita la contraseña en texto llano, tal como cuando se utiliza la contraseña
para conectarse a otro sistema. Las contraseñas nunca deben ser insertadas directamente en el
código fuente. Las llaves de descifrado deben ser protegidas fuertemente para asegurar que no
puedan ser arrebatadas y usadas para descifrar el archivo de contraseñas
Página.35 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
- Protección del Id de Sesión: idealmente, toda la sesión de usuario debe ser protegida mediante
SSL. Si esto es hecho, entonces el id de sesión (Ej., cookie de sesión) no puede ser tomado de la
red, lo cual es el mayor riesgo de exposición de un id de sesión. Si no es viable el uso de SSL por el
desempeño u otras razones, entonces los id’s de sesión deben ser protegidos de alguna otra forma.
En primera instancia, éstos nunca deben ser incluidos en el URL ya que pueden ser capturados en
memoria rápida (“cached”) por el navegador, mandados en la cabecera referenciada o
accidentalmente re-enviados a un ‘amigo’. Los id’s de sesión deben ser números largos,
complicados y aleatorios que no puedan ser fácilmente adivinados. Los id’s de sesión pueden
también ser cambiados frecuentemente durante una sesión para reducir el tiempo en que es válido
un id de sesión. Los id’s de sesión deben ser cambiados cuando se cambia a SSL, se autentifica u
ocurre otra transacción importante. Los id’s de sesión escogidos por un usuario nunca deben ser
aceptados
- Listas de cuentas: los sistemas deben ser diseñados para evitar que los usuarios logren acceso a
una lista de los nombres de cuentas del sitio. Si las listas de usuarios deben ser mostradas, es
recomendable que alguna forma de pseudónimo (“screen name”) que corresponda a la cuenta
actual sea listada en su lugar. De esa forma el pseudónimo no puede ser usado durante un intento
de conexión o algún otro intento de obtener la cuenta de usuario
- Memoria Rápida (“Cache”) del Navegador: los datos de autenticación y sesión nunca deben ser
suministrados como parte de un GET, en su lugar siempre debe ser utilizado POST. Las páginas de
autenticación deben ser marcadas con todas las diversidades de etiquetas de no uso de memoria
rápida para prevenir que alguien use el botón de retorno en el navegador del usuario para copiar la
página de conexión y re-transmitir las credenciales previamente tecleadas. Muchos navegadores de
hoy soportan la bandera (“flag”) de ‘autocomplete=false’ para prevenir el almacenamiento de
credenciales en la memoria rápida (“cache”) de auto completar
Definición
El manejo inadecuado de errores puede introducir variados problemas de seguridad a un sitio Web. El error
mas común es cuando información detallada de mensajes error, como rastreos de pila, volcados de BD y
códigos de error son mostrados al usuario (un pirata informático). Estos mensajes revelan detalles de la
implementación que nunca deberían ser revelados.
Tales detalles pueden proveer a los piratas informáticos de pistas importantes sobre potenciales fallas en el
sitio y tales mensajes de error son también perturbadores para los usuarios normales.
Las aplicaciones Web frecuentemente generan condiciones de error durante su operación normal. Falta de
memoria, excepciones por punteros nulos, llamadas fallidas a sistema, BD no disponible, tiempo de espera
de red agotado y cientos de otras condiciones comunes pueden causar que los errores sean generados.
Página.36 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Estos errores deben ser manejados de acuerdo a un esquema bien pensado que provea al usuario de un
mensaje de error con sentido, información de diagnostico
para quienes mantienen el sitio, y ninguna información útil para un atacante.
Vulnerabilidad
Las características por validar en el Manejo Inadecuado de Errores en las aplicaciones web son las
siguientes:
o Generar los errores comunes como ingreso de información que este asociado a la entrada esperada
por ejm: monto, fecha, valores en blanco, rutas de archivos que no existen, etc
o Crear escenarios que no ocurren generalmente como: desconexión de la red, apagado de la base
de datos, usuarios incorrectos, deshabilitar permisos, etc.
o Los mensajes no deberán de revelar detalles de la implementación.
Estándar
La solución es implementar una Clase Java la cual especifica las Excepciones posbiles causadas por la
aplicación.
o La clase control de Excepciones, crear una estructura para el control de excepciones, se debe
implementar en las clases Action (Controladores).
o Los mensajes devueltos al usuario enmascaran los mensajes de Error, para no revelar la
información, BD, rutas, servidor, etc.
Página.37 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
package pe.com.hermes.exception
/* Maneja las excepciones de la BDHTB*/
public class BDHTBException extends HTBException {
static final long serialVersionUID = 1L;
public BDHTBException(){
}
public BDHTBException(Exception e){
super(e);
}
public BDHTBException(String msg){
super(msg);
}
public BDHTBException(Exception e, String msg){
super(e,msg);
}
Definir en un archivo de propiedades los mensajes de excepción capturados y los que serán mostrados al
usuario.
Definición
Muchas de las aplicaciones Web necesitan guardar información sensible, ya sea en una base de datos, en
un sistema de archivos o en algún lugar. La información podría ser contraseñas, números de tarjetas de
crédito, registros contables o información propietaria. Frecuentemente las técnicas de encriptación
(“encryption”) son usadas para proteger esta información sensible. Mientras que la encriptación se ha vuelto
relativamente fácil de implementar y usar, los desarrolladores frecuentemente comenten errores aun cuando
Página.38 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
la integran dentro de una aplicación Web. Los desarrolladores pueden sobreestimar la protección ganada
por el uso de la encriptación y no ser cuidadosos en asegurar otros aspectos del sitio.
Vulnerabilidad
Las características por validar en las aplicaciones web son las siguientes:
Estándar
La solución es incluir en una la librería (JAR) la clase que especifica los métodos encriptación y
desencriptación de la aplicación web.
Se ingresará el key de encriptación por el responsable del Área de Seguridad de TI-Hermes antes de
compilar la librería.
Definición
Muchas de las aplicaciones Web necesitan guardar información sensible, ya sea en una base de datos, en
un sistema de archivos o en algún lugar. La información podría ser contraseñas, números de tarjetas de
crédito, registros contables o información propietaria. Frecuentemente las técnicas de encriptación
(“encryption”) son usadas para proteger esta información sensible. Mientras que la encriptación se ha vuelto
relativamente fácil de implementar y usar, los desarrolladores frecuentemente comenten errores aun cuando
la integran dentro de una aplicación Web. Los desarrolladores pueden sobreestimar la protección ganada
por el uso de la encriptación y no ser cuidadosos en asegurar otros aspectos del sitio.
Página.39 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Vulnerabilidad
I1: Usuario inicia varios request sin concluir el anterior
Las características que presentan las aplicaciones web son las siguientes:
o Un atacante puede ser capaz de bloquear a un usuario legítimo enviando credenciales inválidas
hasta que el sistema bloquee la cuenta.
o El sistema bloquea alguno de los recursos de un usuario, entonces el atacante podría
potencialmente interrumpir el acceso a éstos de manera que otros no pudieran usarlo.
o Se presenta cuando el servidor Web se encuentra abajo por causa de un ataque
o Usar Herramientas de pruebas de carga como JMeter pueden generar tráfico Web de manera.
o Probar desde una sola dirección IP es útil pues le da una idea de cuántas peticiones puede un
atacante generar para dañar el aplicativo web.
Estándar
La solución es validar el flujo de ejecución en cada pantalla de la aplicación web.
o Considerar las configuración en OAS para deshabilitar la múltiple petición repetida para un usuario
desde un mismo IP Cliente, evitando así que pueda causar problemas en el servidor.
o Considerar la suspensión cualquier petición de un usuario que se esté procesando cuando llegue
otra petición de ese mismo usuario, restringir los botones mientras se encuentre un proceso en el
servidor.
Al realizar una primera acción en la pantalla se debe marcar el parámetro operación con el valor Uno
(usando la funciont Javascript ejecutaAccion), al realizar una segunda acción y aun no termina la primera se
debe validar la operación usando la función validaOperacion, evitando así multiples llamadas a procesos por
un solo usuario.
function ejecutaAccion(){
Página.40 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Definición
El Servidor Web y el servidor de aplicación juegan un papel clave en la seguridad de una aplicación Web.
Estos servidores son responsables de servir el contenido y ejecutar aplicaciones que generan contenido.
Además, muchos servidores de aplicación proveen un número de servicios que los servidores Web pueden
usar, incluyendo almacenamiento de información, servicios de directorio, correo, mensajería y más. Fallar al
manejar la configuración apropiada de sus servidores puede llevar a una amplia variedad de problemas de
seguridad.
Vulnerabilidad
Las características por validar que presentan las aplicaciones web son las siguientes:
Estándar
La solución es seguir la política de depuración de los elementos innecesarios en el aplicativo web.
o Eliminar las Clases, JSPs, imágenes, scripts, estilos, librerías (jar), archivos de configuración que
no son usados.
Página.41 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
o Registro de todos los eventos y alertas que realizan los usuarios, implementar el Log por aplicativo
que sirve para depurar y encontrar los errores en tiempo de ejecución en producción. Usar la librería
de Apache (org.apache.log4j) el jar usado es: log4j.jar y el archivo de configuración log4j.xml
logger.info("mensaje de Información");
logger.warn("mensaje de advertencia");
logger.error("mensaje de Error");
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] %m%n" />
</layout>
</appender>
<!-- nivel del log TRACE / DEBUG / INFO / WARN / ERROR / FATAL-->
<root>
<level value="debug" />
<appender-ref ref="fileLog" />
</root>
</log4j:configuration>
Página.42 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
- Requisitos de Hardware.
1. PC Pentium Dual Core 2.0GHz o Superior.
2. Memoria RAM 2GB como mínimo, se recomienda 4GB.
3. Lector CD, DVD ROM
4. Tarjeta de Red.
- Requisitos de Software.
1. Windows XP Professional Service Pack 2.
2. Internet Explorer 6 o superior.
3. Java jdk 1.5.0
Página.43 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Página.44 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Los datos necesarios para la configuración del pool de conexiones son los siguientes:
Clase: oracle.jdbc.pool.OracleDataSource
Usuario: usuario de base de datos
Clave: clave del usuario de base de datos
Login Timeout: tiempo de espera en el login
URL: La cadena de conexión esta compuesto por el IP del servidor de base de datos y nombre de la
base de datos.
jdbc:oracle:thin:@89.135.1.64:1521:htbp.
Página.45 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Página.46 de 47
Estándares de Diseño y Programación en Java
Nombre del documento Código Fecha versión
MANUAL DE ESTANDARES DE DISEÑO Y
14/12/2009 2.0
PROGRAMACION EN JAVA
Revisado por: Aprobado por:
Página.47 de 47
Estándares de Diseño y Programación en Java