[SOLUCIONADO] Qué es inyección SQL en php

Iniciado por Only, Agosto 01, 2011, 05:28:50 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 01, 2011, 05:28:50 AM Ultima modificación: Marzo 05, 2016, 09:29:53 PM por Gabriela
leyendo la primer entrega del taller de php , me llamo la atencion un comentario acerca de seguridad y mencionan algo que es inyeccion , es para bases de datos ..

alguien me podria explciar que es eso,como hacerlo y como defenderme

gracias a todos

Agosto 01, 2011, 12:10:11 PM #1 Ultima modificación: Agosto 01, 2011, 12:12:45 PM por Stiuvert
La inyección SQL se produce cuando se inserta o inyecta código SQL dentro del código SQL programado, al fin de alterar el funcionamiento del código programado y lograr que se ejecute el código incrustado en la base de datos.


Algunas formas de evitar la Inyección SQL:

PHP

En el lenguaje PHP, hay diferentes funciones que pueden servir de ayuda para usar con distintos sistemas de gestión de bases de datos. Para MySQL, la función a usar es mysql_real_escape_string:

Código: php
$query_result = mysql_query("SELECT * FROM usuarios WHERE nombre = \"" . mysql_real_escape_string($nombre_usuario) . "\"");



Parametrización de sentencias SQL

Código: php

Connection con = (acquire Connection)  PreparedStatement pstmt = con.prepareStatement("SELECT * FROM usuarios WHERE nombre = ?");
pstmt.setString(1, nombreUsuario);
ResultSet rset = pstmt.executeQuery();


Escape de las variables a insertar en la sentencia SQL

Escapar el texto contenido en la variable reemplazando los caracteres especiales en SQL por su equivalente textual, de tal forma que SQL interprete todo el contenido de la variable como si fuera texto.

Código: php
Connection con = (acquire Connection) 
Statement stmt = con.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario.replace("\\", "\\\\").replace("'", "\\'") + "';");



También se puede utilizar el método escapeSQL de la clase StringEscapeUtils procedente de la librería de Apache Commons Lang

Código: php
Connection con = (acquire Connection) 
Statement stmt = con.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * FROM usuarios WHERE nombre = '" + StringEscapeUtils.escapeSQL(nombreUsuario) + "';");




ok muchas gracias bro , estare al pendiente de la seguridad en un proyecto que hago para mi escuela .. me gustaria que me ayudaran con la seguridad para que sea impenetrable

cuando tenga una beta lo subo al foro para ver que mejoras le hacemos

saludos y gracias

Nota : Algun mod que cierre el post