Documentos de Académico
Documentos de Profesional
Documentos de Cultura
05 DE OCTUBRE DE 2022
MANEJO DINÁMICO DE DATOS.
4.1 Descripción de la memoria y espacio para datos:
Memoria principal: Contiene sólo los datos y las instrucciones sobre qué equipo
está trabajando actualmente. Tiene una capacidad limitada y datos se pierde
cuando se apaga el suministro eléctrico. Generalmente se compone del dispositivo
semiconductor. Estos recuerdos no son tan rápidos como los registros. Instrucción
necesaria para procesar los datos residen en la memoria principal. Se divide en dos
subcategorías RAM y ROM.
05 DE OCTUBRE DE 2022
Las ventajas de la memoria caché son los siguientes:
https://cutt.ly/IV8tc4O
05 DE OCTUBRE DE 2022
En programación, una variable es un espacio de memoria reservado para almacenar un
valor determinado que corresponde a un tipo de dato soportado por el lenguaje de
programación en el cual se trabaja.
Una variable es representada y usada a través de una etiqueta (un nombre simbólico) que
le asigna un programador o que ya viene predefinida en el lenguaje.
El programador emplea ese nombre de variable para poder usar la información que está
contenida en ella. Durante el tiempo de ejecución del programa la variable puede adquirir
un valor determinado y puede cambiar durante el curso de ejecución de este.
Por ejemplo, en la variable de nombre "num", almacenamos el número 8 (que es del del
tipo número entero).
num = num + 1
En lenguajes de programación de tipado estático (como Java o ML), una variable también
tiene un tipo de dato, lo que significa que sólo puede almacenar un cierto tipo de valores.
Por ejemplo, una variable del tipo "entero" tiene prohibido almacenar valores de texto.
En tanto en los lenguajes de programación de tipado dinámico (como Python o PHP), son
los valores y no las variables los que tienen tipo. Esto significa que una variable puede
contener diferentes tipos de datos durante su ejecución, a elección del programador.
Una variable puede ser del tipo booleano, entero, decimal de coma flotante, carácter,
cadena de texto, arreglo, matriz, tipo definido por el usuario, etc. Son todos tipos de dato
y están determinados por el lenguaje de programación que se emplea.
https://cutt.ly/UV8uhWo
05 DE OCTUBRE DE 2022
4.2 Modificación segura e indirecta de datos:
En esta sesión nos centraremos en el filtrado de datos suponiendo que todos los datos
enviados a través de variables como $_GET, $_POST, ... es inseguro.
3. RFI - LFI (Remote/Local File Inclusion): incluir archivos remotos dentro de nuestros
scripts PHP. La función "include()" de PHP nos permite incluir archivos dentro de
nuestro documento como si fueran parte del texto.
<?php
$pagina = $_GET['pag'];
include($pagina);
https://cutt.ly/oV8oGH7
05 DE OCTUBRE DE 2022
Herramientas para minimizar el riesgo asociado:
Analizadores Estáticos.
Para evitar este tipo de “bugs” en primer lugar existen analizadores estáticos de código
que son capaces de detectar las vulnerabilidades más extendidas. Entre ellos destacamos:
PMD que funciona para lenguajes como Java, JavaScript, XML, XSL.
FlawFinder para C.
LAPSE (OWASP) que funciona como un plugin de Eclipse, y obviamente es para
Java.
Algunas herramientas comerciales son CodeSecure (Armorize), AppScan (IBM),
Fortify (HP). Estas suelen funcionar para diferentes lenguajes (ASP.NET, VB.NET,
C#, Java/J2EE, JSP, EJB, PHP, Classic ASP and VBScript)
Guías
Por otro lado, también existen diferentes guías que recopilan mejores prácticas para el
desarrollo de aplicaciones seguras en diferentes lenguajes de programación:
ISO Programming languages – Guide for the Use of the Ada Programming Language
in High Integrity Systems.
MISRA: Guidelines for the use of the C language in critical systems.
CERT: C Secure Coding Standard, Secure Coding in C and C++ y Oracle Secure
Coding Standard for Java.
OWASP: * Secure Coding Practices Quick Reference Guide.
05 DE OCTUBRE DE 2022
https://cutt.ly/0V8pFv6
Hay tres tipos de errores que nos friegan la vida cuando programamos y más aún cuando
estamos empezando este mundo tan fascinante como es el de la programación, que en
muchas ocasiones por más sencillos que estos sean, en algunos casos pasamos horas e
incluso días buscando la solución.
Asignar en una variable otra variable con tipo de dato diferente: es decir si tengo
una variable String y su valor lo asigno en una variable de tipo int, en este caso el
compilador me va a dar un error de conversión de tipos y esto no va a dejar que la
aplicación compile, incluso un error parecido se puede dar en variables de grupos
del mismo tipo, por ejemplo, asignar el valor de un tipo int en un tipo short.
De forma general este tipo de errores son de sintaxis. Afortunadamente los IDE como
Eclipse, Netbeans ayudan mucho a reconocerlos y nos dan una idea de lo que puede estar
pasando para de esta manera corregirlos incluso en algunos casos los resuelven.
Para entender mejor los errores en tiempo de compilación crea un proyecto, luego una
clase (debe tener habilitado el método principal main) y dentro del método principal main
copia el siguiente código desde la línea 8 hasta la 22.
05 DE OCTUBRE DE 2022
package com.ecodeup.errores;
int suma=0;
String nombre;
suma=nombre; //error 1
int valor=0;
short numero=0;
numero=valor; //error 2
int mayor;
int menor;
if (true){
mayor=menor;//error 4
05 DE OCTUBRE DE 2022
}
Digamos que en una aplicación móvil consuma datos de un servicio web y que al
momento de consumir esos datos no haya conexión a internet, esto hace que la
aplicación se cuelgue.
Esos algunos ejemplos, pero me imagino que hay muchos más, a continuación, describo
los más básicos.
05 DE OCTUBRE DE 2022
package com.ecodeup.errores;
miArreglo[5]=0;
int sumaNotasExamenes=60;
int numeroExamenes=0;
int promedio=sumaNotasExamenes/numeroExamenes;
05 DE OCTUBRE DE 2022
De los muchos que pueden darse en una aplicación, en el código existen 2 errores en
tiempo de compilación , y bueno el primero error se da en la línea 9 y aunque
aparentemente el programa a simple vista se ve bien, el error se da en la ejecución del
programa puesto que estoy intentando almacenar en una posición del arreglo que no
existe, recordemos que el tamaño de un arreglo se define como n-1, en el caso del
ejemplo para el arreglo miArreglo sólo podríamos acceder o almacenar valores hasta la
posición 4.>
El segundo error se da en la línea 13, para ver este error debes comentar las líneas 8 y 9,
este error se da porque estoy dividiendo el valor de la variable sumaNotasExamenes para
la variable numeroExamenes que tiene un valor de cero y esta es una operación no
permitida para la Máquina Virtual de Java.
Errores lógicos. Estos son los más difíciles de detectar y corregir y pues bueno porque digo
que son difíciles, es que con este tipo de errores la aplicación compila y se ejecuta de
forma normal, pero ¿y entonces dónde está el error?
Pues en estos casos el problema son errores lógicos que a fin de cuentas estos ocurren por
el mal diseño del algoritmo de la aplicación
Para terminar, también mencionar que otro error de tipo lógico también ocurre cuando
colocamos punto y coma después de una sentencia if o for y aunque parezcan errores tan
obvios, se dan cuando estamos empezando a programar, como se puede ver a
continuación lo que debería imprimir la variable i que son los números del 0 hasta el 4,
imprime sólo el número 5.
05 DE OCTUBRE DE 2022
package com.ecodeup.errores;
//errores lógicos
int i;
for(i=0; i<5;i++);{
System.out.println(i);
05 DE OCTUBRE DE 2022
Consejos:
Tener muy cuenta las divisiones por cero, en cuanto a los arreglos no acceder a
posiciones que no existen.
Cuando diseñemos un algoritmo tener en cuenta todos los escenarios posibles que
pueda tomar la aplicación durante su ejecución.
https://cutt.ly/jV8fWY9
05 DE OCTUBRE DE 2022