ooHG con SQL (ojo con los hackers)

9 views
Skip to first unread message

Ciro Vargas C

unread,
Feb 23, 2026, 11:25:10 AM (4 days ago) Feb 23
to oo...@googlegroups.com

Hola todos como les prometi esto es un tema que parece menor pero no lo es
y miren que tan facil es meterse en un sistema si no esta seguro

esto funciona tanto para codigo web como para codigo ooHG porque la parte de seguridad se da en el PHP no importa el codigo que colqoues en tu prg o js o loque sea.

aqui les paso un ejemplo bien explicado super didactico en como funciona esto

y que debemos hacer para solucionarlo.

Prepared Statements se llama el metodo

espero les guste y les sirva ya que es ms impotrtante de lo que parece.
==========================================================

como nota curiosa

ayer le dije a Declan (mi bot programador) que me corrigiera todos mis php con esa norma, lo hizo en pocos minutos , a mano esto me hubiera llevado dias y con el peligro de meter el dedo mal y danar algo.


La Aventura de los Formularios Mágicos

Imagina que tienes un club secreto de superhéroes 🦸‍♂️ y para entrar, necesitas decir tu nombre y una contraseña especial. Tienes un guardián robot (nuestro programa PHP) que revisa una lista mágica para ver si puedes pasar.

🏰 El Castillo de los Usuarios

Aquí está nuestra lista mágica de miembros del club:
Table
Copy
user (nombre)password (contraseña)
batmanmurcielago123
spidermantelaraña456
supermankryptonita789

🤖 El Guardián Robot (El Código PHP)

El guardián hace preguntas así:
php
Copy
<?php
// El formulario nos envía el nombre y la contraseña
$nombre = $_POST['user'];      // "batman"
$clave = $_POST['password'];   // "murcielago123"

// El guardián construye la pregunta mágica a la base de datos
$sql = "SELECT * FROM usuarios WHERE user = '$nombre' AND password = '$clave'";

// La pregunta resultante sería:
// SELECT * FROM usuarios WHERE user = 'batman' AND password = 'murcielago123'
?>
Todo bien hasta aquí, ¿verdad? El guardián revisa y dice: "¡Sí, eres Batman, pasa!"

🦹‍♂️ Entra el Villano: El Truco de la Comilla Mágica

Pero un villano travieso descubre un truco. En lugar de escribir una contraseña normal, escribe algo muy raro:
plain
Copy
Nombre: cualquiera (da igual)
Contraseña: ' OR '1'='1

🧙‍♂️ ¿Qué pasa en la mente del guardián robot?

El pobre guardián junta todo sin pensar:
php
Copy
$sql = "SELECT * FROM usuarios WHERE user = 'cualquiera' AND password = '' OR '1'='1'";

🧩 Desglosemos el truco:

Table
Copy
ParteSignificado
'Cierra la comilla de la contraseña prematuramente
ORDice "O también..."
'1'='1'¡Esto SIEMPRE es verdad! 1 siempre es igual a 1
'Abre otra comilla para no romper el hechizo
La pregunta final del guardián se convierte en:
"¿Hay alguien llamado 'cualquiera' CON esa contraseña, O es verdad que 1 es igual a 1?"
¡Como 1 siempre es igual a 1, el guardión dice: "¡Sí, es verdad! ¡Pasa!" 🚨
¡Y el villano entra al club sin saber ninguna contraseña! 😱

🛡️ La Solución: El Escudo Mágico de las Consultas Preparadas

Para proteger nuestro club, necesitamos enseñar al guardián a no confundirse con los trucos. Le daremos una plantilla mágica donde pone signos de interrogación (?) en lugar de escuchar palabras sueltas.

✨ El Código Protegido:

php
Copy
<?php
// Conectamos a la base de datos (usando PDO, una herramienta moderna)
$pdo = new PDO('mysql:host=localhost;dbname=mi_base', 'usuario', 'clave');

// PASO 1: Creamos la plantilla con signos de interrogación
$sql = "SELECT * FROM usuarios WHERE user = ? AND password = ?";

// PASO 2: Preparamos la plantilla (el guardián la memoriza)
$stmt = $pdo->prepare($sql);

// PASO 3: Ejecutamos con los valores reales, bien protegidos
$stmt->execute([$_POST['user'], $_POST['password']]);

// El villano puede escribir lo que quiera, pero el sistema lo verá como TEXTO, no como código
// ' OR '1'='1  se convierte en texto plano, no en un truco lógico
?>

🎯 ¿Por qué funciona?

Table
Copy
Antes (Peligroso)Después (Seguro)
El villano mezcla su truco con el códigoEl villano queda atrapado en una burbuja de texto
Las comillas del villano cambian la preguntaLas comillas del villano son solo letras normales
1=1 es un cálculo que da "verdadero"1=1 es solo texto sin sentido para el programa

🎨 Dibujo para Recordar

plain
Copy
ANTES (Inseguro):
Usuario escribe:  ' OR '1'='1
                   ↓
Código confundido: ...password = '' OR '1'='1'  ← ¡Esto es código mágico!

DESPUÉS (Seguro con ?):
Usuario escribe:  ' OR '1'='1
                   ↓
Sistema protegido: ...password = '?')  ← ¡Esto es solo texto aburrido!
                         ↑
                    El ? se reemplaza SAFAMENTE

🌟 Resumen para el Pequeño Héroe

Table
Copy
🚫 NO hacer (Inseguro)SÍ hacer (Seguro)
Pegar textos directamente en la pregunta SQLUsar ? y prepare()
Confiar en lo que escriben los extrañosTratar todo como texto inofensivo
Dejar que las comillas rompan el hechizoPrepared Statements
La regla de oro: "Nunca juntes lo que dice un extraño con tu pregunta mágica. Pon un signo de interrogación y deja que el sistema inteligente lo maneje con cuidado." 🧠✨

-
Reply all
Reply to author
Forward
0 new messages