Laboratorio de Codificación Segura
Python
En este primer laboratorio vamos a aprender a implementar prácticas de codificación segura en Python mediante la validación de entradas y el manejo seguro de datos sensibles.
Objetivo:
Aprender a implementar prácticas de codificación segura en Python mediante la validación de entradas y el manejo seguro de datos sensibles.
Requisitos:
- Python 3.12.4 o superior
- Editor de código (por ejemplo, VS Code, PyCharm)
Paso 1: Configuración del entorno
- Instalación de Python:
- Asegúrate de tener Python instalado. Puedes descargarlo desde www.python.org.
Creación de un entorno virtual:
python -m venv venv
source venv/bin/activate # En Windows usa `venv\Scripts\activate`
Instalación de las dependencias necesarias:
En este laboratorio no se requieren dependencias externas adicionales.
Paso 2: Validación de entradas
Creación del archivo de validación:
Crea un archivo llamado validation.py.
Implementación de la función de validación de correo electrónico:
Copia y pega el siguiente código en validation.py:
import re
def validar_correo(correo):
= r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
patron if re.match(patron, correo):
return True
else:
return False
# Uso de la función
if __name__ == "__main__":
= "test@example.com"
correo if validar_correo(correo):
print("Correo válido")
else:
print("Correo inválido")
Ejecución del código:
En la terminal, navega hasta el directorio que contiene validation.py y ejecuta:
python validation.py
Deberías ver el mensaje “Correo válido” en la salida.
Paso 3: Validación adicional
Validación de números de teléfono:
- Agrega la siguiente función a validation.py para validar números de teléfono:
def validar_telefono(telefono):
= r'^\+?1?\d{9,15}$'
patron if re.match(patron, telefono):
return True
else:
return False
# Uso de la función
if __name__ == "__main__":
= "+12345678901"
telefono if validar_telefono(telefono):
print("Teléfono válido")
else:
print("Teléfono inválido")
Ejecución del código:
Ejecuta el archivo de nuevo para ver la validación de teléfono.
Java
En este laboratorio vamos a aprender a implementar prácticas de codificación segura en Java mediante la gestión segura de contraseñas.
Objetivo:
Aprender a implementar prácticas de codificación segura en Java mediante la gestión segura de contraseñas.
Requisitos:
- Java 8 o superior
- IDE de Java (por ejemplo, IntelliJ IDEA, Eclipse)
Paso 1: Configuración del entorno
Instalación de Java:
Asegúrate de tener Java instalado. Puedes descargarlo desde www.oracle.com.
Creación de un proyecto en tu IDE:
Abre tu IDE y crea un nuevo proyecto Java.
Paso 2: Gestión de contraseñas
Creación de la clase de utilidades de contraseña:
Crea una clase llamada PasswordUtils en tu proyecto.
Implementación de la función de hash de contraseña:
Copia y pega el siguiente código en PasswordUtils.java:
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.Base64;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
public class PasswordUtils {
public static String hashPassword(String password, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 65536, 128);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
byte[] hash = factory.generateSecret(spec).getEncoded();
return Base64.getEncoder().encodeToString(hash);
}
}
Uso de la función de hash de contraseña:
Crea una clase Main para probar la función:
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.Random;
public class Main {
public static void main(String[] args) {
try {
String password = "mySecurePassword";
byte[] salt = new byte[16];
new Random().nextBytes(salt);
String hashedPassword = PasswordUtils.hashPassword(password, salt);
System.out.println("Hashed Password: " + hashedPassword);
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
.printStackTrace();
e}
}
}
Ejecución del código:
Ejecuta la clase Main en tu IDE. Deberías ver la contraseña hasheada impresa en la consola.
JavaScript
Objetivo:
Aprender a implementar prácticas de codificación segura en JavaScript mediante la validación de entradas y el manejo seguro de datos sensibles.
Requisitos:
- Node.js y npm instalados
- Editor de código (por ejemplo, VS Code)
Paso 1: Configuración del entorno
Instalación de Node.js:
Asegúrate de tener Node.js instalado. Puedes descargarlo desde nodejs.org.
Creación de un proyecto Node.js:
En la terminal, crea una nueva carpeta para tu proyecto y navega a ella:
mkdir secure-coding-js
cd secure-coding-js
Inicialización del proyecto:
Inicializa un nuevo proyecto Node.js:
npm init -y
Instalación de dependencias:
Para este laboratorio, instalaremos las siguientes dependencias:
- bcrypt para el manejo seguro de contraseñas
npm install bcrypt
Paso 2: Validación de entradas
Creación del archivo de validación:
Crea un archivo llamado validation.js.
- Implementación de la función de validación de correo electrónico:
- Copia y pega el siguiente código en validation.js:
function validarCorreo(correo) {
const patron = /^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/;
return patron.test(correo);
}
// Uso de la función
const correo = "test@example.com";
if (validarCorreo(correo)) {
console.log("Correo válido");
else {
} console.log("Correo inválido");
}
Ejecución del código:
En la terminal, ejecuta el archivo validation.js:
node validation.js
Deberías ver el mensaje “Correo válido” en la salida.
Paso 3: Gestión de contraseñas
- Creación del archivo de gestión de contraseñas:
- Crea un archivo llamado password.js.
Implementación de la función de hash de contraseña:
- Copia y pega el siguiente código en password.js:
const bcrypt = require('bcrypt');
async function hashPassword(password) {
const saltRounds = 10;
const hashedPassword = await bcrypt.hash(password, saltRounds);
return hashedPassword;
}
async function main() {
const password = "mySecurePassword";
const hashedPassword = await hashPassword(password);
console.log("Hashed Password:", hashedPassword);
}
main().catch(err => console.error(err));
Ejecución del código:
- En la terminal, ejecuta el archivo password.js:
node password.js
Deberías ver la contraseña hasheada impresa en la consola.
Paso 4: Validación adicional
Validación de números de teléfono:
Agrega la siguiente función a validation.js para validar números de teléfono:
function validarTelefono(telefono) {
const patron = /^\+?1?\d{9,15}$/;
return patron.test(telefono);
}
// Uso de la función
const telefono = "+12345678901";
if (validarCorreo(correo)) {
console.log("Correo válido");
else {
} console.log("Correo inválido");
}
if (validarTelefono(telefono)) {
console.log("Teléfono válido");
else {
} console.log("Teléfono inválido");
}
Ejecución del código:
Ejecuta el archivo validation.js de nuevo para ver la validación de teléfono.
C#
Objetivo:
Aprender a implementar prácticas de codificación segura en C# mediante la validación de entradas y el manejo seguro de contraseñas.
Requisitos:
- .NET SDK instalado
- Visual Studio o Visual Studio Code
Paso 1: Configuración del entorno
- Instalación de .NET SDK:
- Asegúrate de tener el .NET SDK instalado. Puedes descargarlo desde dotnet.microsoft.com.
Creación de un nuevo proyecto:
- En la terminal, crea una nueva carpeta para tu proyecto y navega a ella:
mkdir SecureCodingCSharp
cd SecureCodingCSharp
Inicialización de un nuevo proyecto de consola:
dotnet new console
Paso 2: Validación de entradas
- Creación de la clase de validación:
- En el archivo Program.cs, implementa la siguiente función de validación de correo electrónico:
using System;
using System.Text.RegularExpressions;
namespace SecureCodingCSharp
{
class Program
{
static void Main(string[] args)
{
string correo = "test@example.com";
if (ValidarCorreo(correo))
{
.WriteLine("Correo válido");
Console}
else
{
.WriteLine("Correo inválido");
Console}
}
static bool ValidarCorreo(string correo)
{
string patron = @"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$";
return Regex.IsMatch(correo, patron);
}
}
}
Ejecución del código:
En la terminal, ejecuta el proyecto:
dotnet run
Deberías ver el mensaje “Correo válido” en la salida.
Paso 3: Gestión de contraseñas
Creación de la clase de gestión de contraseñas:
Crea un nuevo archivo llamado PasswordUtils.cs y agrega el siguiente código:
using System;
using System.Security.Cryptography;
public class PasswordUtils
{
public static string HashPassword(string password, byte[] salt)
{
using (var rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, salt, 10000))
{
return Convert.ToBase64String(rfc2898DeriveBytes.GetBytes(256));
}
}
public static byte[] GenerateSalt()
{
byte[] salt = new byte[16];
using (var rngCryptoServiceProvider = new RNGCryptoServiceProvider())
{
.GetBytes(salt);
rngCryptoServiceProvider}
return salt;
}
}
Uso de la función de hash de contraseña:
Modifica el archivo Program.cs para incluir el uso de la clase PasswordUtils:
using System;
namespace SecureCodingCSharp
{
class Program
{
static void Main(string[] args)
{
string correo = "test@example.com";
if (ValidarCorreo(correo))
{
.WriteLine("Correo válido");
Console}
else
{
.WriteLine("Correo inválido");
Console}
string password = "mySecurePassword";
byte[] salt = PasswordUtils.GenerateSalt();
string hashedPassword = PasswordUtils.HashPassword(password, salt);
.WriteLine("Hashed Password: " + hashedPassword);
Console}
static bool ValidarCorreo(string correo)
{
string patron = @"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$";
return Regex.IsMatch(correo, patron);
}
}
}
Ejecución del código:
En la terminal, ejecuta el proyecto de nuevo:
dotnet run
Deberías ver la contraseña hasheada impresa en la consola.
Paso 4: Validación adicional
Validación de números de teléfono:
Agrega la siguiente función a Program.cs para validar números de teléfono:
static bool ValidarTelefono(string telefono)
{
string patron = @"^\+?1?\d{9,15}$";
return Regex.IsMatch(telefono, patron);
}
// Uso de la función
string telefono = "+12345678901";
if (ValidarTelefono(telefono))
{
.WriteLine("Teléfono válido");
Console}
else
{
.WriteLine("Teléfono inválido");
Console}
Ejecución del código:
Ejecuta el proyecto de nuevo para ver la validación de teléfono.