Cómo prevenir los ataques por SQL Injection en aplicaciones PHP

Inicio / Cómo hacer para... / Cómo prevenir los ataques por SQL Injection en aplicaciones PHP

Uno de los fantasmas más temidos por quienes contratan servicios de desarrollo (especialmente cuando se trata de su primera experiencia) es el de los ataques de hackers.

Si bien es imposible asegurar al 100% un sistema (de software o de cualquier otro tipo), existe una serie de buenas prácticas que disminuyen sensiblemente la probabilidad de ocurrencia de tales ataques (o al menos, su probabilidad de éxito).

Por lo general, los ataques se basan en la explotación de código vulnerable como ser algún caso raro que el desarrollador no tuvo en cuenta.

Uno de los ataques más usuales es el conocido como sql injection.

SQL_Injection

De lo que se trata es de ejecutar código sql sin autorización.

Los scripts de PHP que no están bien escritos pueden ser atacados de esta forma.

Veamos un ejemplo:

<?php

$sql = "SELECT * FROM users WHERE nombre = '".$_POST['nombre']."'";

$db->query($sql);

Si el $_POST se llena normalmente no habría problema (Si lo hace un usuario legítimo de nuestra aplicación), pero… ¿qué pasa si un usuario malicioso lo hace?

Por ejemplo, qué tal si alguien pusiera algo como esto en el campo nombre:

';DROP TABLE users;--

El sql total quedaría así:

SELECT * FROM users WHERE nombre = '';DROP TABLE users;--'

Por si lo querés ver más gráfico, te dejo este excelente comic.

Bueno… formas de protegerse de esto hay muchas, una muy práctica es utilizar los prepared statements de PDO.

El ejemplo quedaría de esta forma:

<?php

$sql = "SELECT * FROM users WHERE nombre = :nombre";
$st = $db->prepare( $sql );
$st->execute( [ ':nombre' => $_POST['nombre'] ] );

De este modo, dejamos en manos de PDO la realización de las validaciones y el agregado de comillas donde corresponda, de modo que el sql a ejecutar quede de esta forma:

SELECT * FROM users WHERE nombre = '\';DROP TABLE users;--\''

Con lo cual se vuelve completamente inofensivo 🙂

mchojrin

Director Académico y Docente at Leeway Academy
Hola! Soy Mauro Chojrin, estudié la Lic. en Ciencias de la Computación en la Universidad de Buenos Aires.

Me desempeño como docente de programación desde el año 1997.

Pasé por diferentes instituciones (Escuela Técnica ORT, Digital House, EducacionIT, ITMaster, Escuela DaVinci entre otros).

Actualmente coordino los cursos dictados en Leeway Academy y desarrollo sistemas usando PHP y framework Symfony

Un comentario

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.