UD6 · Seguridad, privacidad y uso ético | MP04 · Soluciones basadas en LLMs
2 · Supervision de entradas (II)
Implementacion de un filtro de entrada
import re
PATRONES_SENSIBLES = {
"dni": r'\b\d{8}[A-Za-z]\b',
"tarjeta": r'\b(?:\d{4}[\s-]?){3}\d{4}\b',
"iban": r'\bES\d{2}[\s]?\d{4}[\s]?\d{4}[\s]?\d{4}[\s]?\d{4}[\s]?\d{4}\b',
"email": r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b',
"ip_privada": r'\b(?:10|172\.(?:1[6-9]|2\d|3[01])|192\.168)\.\d+\.\d+\b',
"token_api": r'\b[A-Za-z0-9]{20,}\b',
}
def filtrar_entrada(texto: str) -> tuple[str, list[str]]:
"""Devuelve el texto limpio y la lista de tipos detectados."""
alertas = []
for tipo, patron in PATRONES_SENSIBLES.items():
if re.search(patron, texto):
alertas.append(tipo)
texto = re.sub(patron, f"[{tipo.upper()}_REDACTADO]", texto)
return texto, alertas
texto_limpio, alertas = filtrar_entrada(entrada_usuario)
if "tarjeta" in alertas or "iban" in alertas:
raise ValueError("Entrada bloqueada: contiene datos financieros.")