Portada » Lenguaje PHP » ¿Cómo evitar la inyección SQL en PHP? Facil

¿Cómo evitar la inyección SQL en PHP? Facil

Cuando realizamos algún proyecto ya se una página web o sistema web siempre estaremos expuestos a peligros de internet como hackers, que se valen de cualquier medio para vulnerar nuestra protección y poder dañar nuestros datos, en este artículo detallaremos algunas estrategias para librarnos de ingresos no permitidos a nuestros sistemas.

En cualquier portal de internet son muy usados los famosos formularios para loguearse, página de contact0, enviar correos, comentarios, búsquedas, registros de nuevos usuarios, etc.

Estos módulos en nuestros portales lo hacen muy bien visto a los visitantes, pero con ello dan un terrible riesgo para la seguridad de tu portal web. Estos formularios es la puerta predilecta de las personas que hacen ataques, el hacking, la inyección de código SQL y XSS.

En nuestros códigos PHP antiguos también son riesgo de seguridad, veamos un ejemplo:

<?php
$mivariable = $_POST['nombres']; 
mysql_query("INSERT INTO `usuarios` (`columna`) VALUES ('$mivariable')");
?>

Eso es porque el usuario que visita nuestra web puede introducir algo como el valor ‘); DROP TABLE usuarios; -, y la consulta se convierte en:

INSERT INTO `usuarios` (`columna`) VALUES('value'); DROP TABLE usuarios;--')

¿Qué se puede hacer para evitar que esto suceda en nuestros formularios?

Primeramente, utilizar instrucciones preparadas y consultas parametrizadas, Migrar a PDO y/o MYSQLi. Estas son sentencias SQL que son enviadas y analizadas por el servidor de base de datos separadamente de cualquier parámetro.

De esta manera es imposible para un atacante inyectar SQL malicioso.

¿Cómo evitar la inyección SQL en PHP? Facil

Usted tiene básicamente dos opciones para lograr esto:

1) Uso de PDO en nuestras consultas, edición e inserción.

Para cualquier controlador de base de datos admitido:

$stmt = $pdo->prepare('SELECT * FROM empleados WHERE nombre= :nombre');

$stmt->execute(array('nombre' => $nombre));

foreach ($stmt as $row) {
    //Hacer algo con $row
}

2) Uso de MySQLi en nuestras consultas, edición e inserción (para MySQL):

$stmt = $dbConnection->prepare('SELECT * FROM empleados WHERE nombre= ?');
$stmt->bind_param('s', $nombre);

$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // Hacer algo con $row
}

Código para inserción de datos a la base de datos

Aquí está un ejemplo (usando PDO):

$preparedStatement = $db->prepare('INSERT INTO mitable (columnas) VALUES (:columnas)');

$preparedStatement->execute(array('columnas' => $unsafeValue));

¿Cómo evitar la inyección SQL?

Los buscadores de artículos en nuestra web son blanco de ataques constantes y son una puerta bastante cómoda para los atacantes, podríamos reemplazar por un buscador de google.

Hay varias reglas de seguridad elementales que debemos tener en cuenta.
Principalmente proteger todas las puertas que abrimos en nuestras páginas con la mejor de las intenciones, que son las entradas en los formularios o cualquier elemento que utilice la etiqueta type=»text»

  1. Usar captchas en los formularios para validar las peticiones de los usuarios.
  2. Crear limitaciones y reglas en los formularios.
  3. En cualquier formulario es necesario usar ciertas reglas para limitar las acciones de acuerdo a su uso.
  4. Se debe utilizar como método en los formularios POSTen vez de GET.
  5. En las entradas para introducir contraseñas, en ver de type=»text» se debe emplear: type=»password»
  6. En las entradas de texto se puede limitar la cantidad de caracteres usando el atributo «maxlength».
  7. En los formularios usados para subir archivos como imágenes, fotos, etc. puede limitarse el tipo de archivo a subir, basado en su extensión, así como regular su tamaño.
  8. Convertir caracteres especiales con htmlspecialchars.
Cómo evitar la inyección SQL
Cómo evitar la inyección SQL

Referencias:

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 4 / 5. Recuento de votos: 2

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Deja un comentario

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

Scroll al inicio
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Privacidad